如何自定义编译zeppelin与livy 的parcels 与CDH6.3.2 集成

如何自定义编译zeppelin 的parcels 与CDH 集成

标签(空格分隔): 大数据运维专栏


  • 一:关于zeppelin介绍
  • 二:如何自定义CDH 的 parcels 与 csd 的jar 包
  • 三:zeppelin 与CDH的集成
  • 四:关于zeppelin 的测试

一:关于zepplin的介绍

Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。

Zeppelin 是一个提供交互数据分析且基于Web的笔记本。方便你做出可数据驱动的、可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等。

Zeppelin 功能:

    数据提取

    数据发掘

    数据分析

    数据可视化展示以及合作

图片.png-200.4kB

二:如何自定义CDH 的 parcels 与 csd 的jar 包

2.1 编译环境准备

建议使用国外云主机 ,flyfish 这边用的是香港的云主机

系统: ubuntu 16.0.4x64
jdk: jdk1.8.0_261
maven: apache-maven-3.6.3

jdk 与maven 安装目录:/software 

环境变量配置:

vim /etc/profile
----
# jdk 
export JAVA_HOME=/software/jdk1.8.0_261
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

# maven
export MAVEN_HOME=/software/apache-maven-3.6.3
PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin
----

java -version 

maven -version 

图片.png-47.9kB


2.2 下载 打包 livy 与 zeppelin 的parcels 打包软件

编译步骤如下:
    1. 下载Livy和Zeppelin源码并编译
    2. 生成Livy和Zeppelin的Parcel包
    3. 下载编译Cloudera提供的cm_ext工具,用于校验parcel及生成manifest.json文件
    4. 生成Livy和Zeppelin的csd文件,用于CM对Livy和Zeppelin服务的识别

下载 打包 源

cd /software

git clone https://github.com/alexjbush/livy_zeppelin_cdh_csd_parcels.git

flyfish 这里已经下载好了

图片.png-18kB

图片.png-38.5kB


然后修改打包源的build.sh
cd /software/livy_zeppelin_cdh_csd_parcels
vim build.sh
---
主要修改的是上面 包的路径:

CM_EXT_BRANCH=cm5-5.15.0
LIVY_URL=http://apache.mirror.anlx.net/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip
LIVY_MD5="2c5b63757414af16da308e63749e1ae6"
LIVY_VERSION=0.7.0

ZEPPELIN_URL=http://apache.mirror.anlx.net/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz
ZEPPELIN_MD5="e9d2cd60f6900eb6435b780a1292106e"
ZEPPELIN_VERSION=0.8.2
---

切记 因为包 的 版本 不同 md5 码 也不同

图片.png-53.7kB

执行编译 生成parcels 包

chmod +x build.sh 

./build.sh parcel 

图片.png-51.1kB

图片.png-44.8kB

图片.png-38.3kB


打出parcels 放在:ZEPPELIN-0.8.2_build 下面

cd ZEPPELIN-0.8.2_build 

manifest.json  ZEPPELIN-0.8.2-el7.parcel 文件

LIVY 放在:

cd LIVY-0.7.0_build
LIVY-0.7.0-el7.parcel  manifest.json

图片.png-18.6kB

图片.png-21.3kB

生成 csd 的jar 包

cd /software/livy_zeppelin_cdh_csd_parcels

./build.sh csd 

图片.png-48.4kB

图片.png-55.1kB

生成 jar 包 

ls -ld *.jar

图片.png-17.6kB

mkdir zepplin-parcels

mv ZEPPELIN.jar zeppelin-parcels

mv ZEPPELIN-0.8.2_build/* zeppelin-parcels 

mv LIVY-0.7.0.jar livy-parcels/
cd LIVY-0.7.0_build/

mv * ../livy-parcels/

tar -zcvf zeppelin-parcels.tar.gz zeppelin-parcels

tar -zcvf livy-parcels.tar.gz livy-parcels

然后把 zeppelin-parcels.tar.gz livy-parcels.tar.gz 这两个包 下载下来 拿去 和 CDH 集成

图片.png-50kB

图片.png-55.1kB


三:zeppelin 与CDH的集成

cd /var/www/html/
mkdir livy zeppelin

上传zeppelin-parcels.tar.gz 这个包 到 /var/www/html/zeppelin 下面 
上传livy-parcels.tar.gz 这个包到 /var/www/html/livy 下面
解压 zeppelin-parcels.tar.gz 然后 将 manifest.json  ZEPPELIN-0.8.2-el7.parcel  ZEPPELIN-0.8.2.jar
这三个文件 移动 到 /var/www/html/zeppelin 下面

同样将 livy-parcels.tar.gz 这个包 解压 将 LIVY-0.7.0-el7.parcel  LIVY-0.7.0.jar  manifest.json 这三个文件 移动到 /var/www/html/livy 下面

图片.png-48.8kB

cd /var/www/html/livy 
 mv LIVY-0.7.0.jar /opt/cloudera/csd/

 cd /var/www/html/zeppelin

 mv mv ZEPPELIN-0.8.2.jar /opt/cloudera/csd/

 chown cloudera-scm:cloudera-scm /opt/cloudera/csd -R 

service cloudera-scm-server restart

图片.png-33.6kB

去CDH 上面 配置 parcels 目录

http://192.168.11.37/livy
http://192.168.11.37/zeppelin

图片.png-90.1kB

图片.png-69.3kB

下载 ---》 分配---》 激活

图片.png-9.2kB

图片.png-65.4kB

图片.png-63.7kB


从新启动CM 加载扩展 jar 包

图片.png-55kB

图片.png-67.2kB

添加livy 与zeppelin 服务

图片.png-67.9kB

图片.png-88.9kB

添加livy 服务依赖

图片.png-64.9kB

图片.png-47.1kB

图片.png-54.3kB

图片.png-74.7kB

图片.png-80.5kB

遇到问题:
  Error found before invoking supervisord: 'getpwnam(): name not found: livy'

图片.png-9.5kB

解决办法: 

 解决办法:

在Livy REST Server所在服务器上增加livy用户及用户组
groupadd livy
useradd livy -g livy
chown livy:livy /var/log/livy
在HDFS的core-site.xml 中添加一下配置:
<property>
    <name>hadoop.proxyuser.livy.groups</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.livy.hosts</name>
    <value>*</value>
</property>

图片.png-8.4kB

图片.png-92.8kB

添加完之后从新启动HDFS 

图片.png-59.8kB

添加zeppelin 服务

在主机 节点 上创建 zepplin 的用户和组

在 Zeppelin Server 服务所在的节点添加 zeppelin 用户和角色:

groupadd zeppelin
useradd zeppelin -g zeppelin
mkdir -p /var/log/zeppelin
chown zeppelin:zeppelin /var/log/zeppelin

图片.png-34.1kB

图片.png-80.1kB

图片.png-44.2kB

图片.png-93kB

报错:

由于错误 java.lang.IllegalArgumentException: The variable [${zeppelin_java_options}] does not have a corresponding value.,角色启动失败。

解决:

ZEPPELIN --> 配置 --> 搜索 zeppelin_java_options --> 添加参数 -Xms1024m --> 重启ZEPPELIN 服务

图片.png-44kB

报错:
mkdir: `file:///var/local/zeppelin/conf': Input/output error

解决办法:

  ZEPPELIN --> 配置 --> 搜索 dir --> 修改配置 --> 重启ZEPPELIN 服务
  hdfs dfs -mkdir -p /var/local/zeppelin/conf
  hdfs dfs -mkdir -p /var/local/zeppelin/data/notebook 
  hdfs dfs -chmod 777 /var/local/zeppelin/conf
  hdfs dfs -chmod 777 /var/local/zeppelin/data/notebook

图片.png-42.5kB

图片.png-67.7kB

图片.png-104.7kB

图片.png-79.4kB


因为flyfish这边的 8080 端口 被占用了,改一下 zeppelin的端口 为 8081 
然后 改一下 zeppelin的 服务端 地址,然后从新启动zeppelin 服务

图片.png-29.1kB

图片.png-28.2kB

打开web:
http://192.168.11.37:8081

图片.png-46.3kB

四: 关于zeppelin 的测试

图片.png-62.8kB

测试实例一:

上传测试数据
vim test.txt
---
hadoop hive
spark zeppelin 
hadoop spark
---

hdfs dfs -put test.txt /tmp 

图片.png-39.3kB

运行spark 测试程序

%spark
val textFile = spark.read.textFile("/tmp/test.txt")
textFile.count()
textFile.first()

图片.png-24.2kB

输出结果

图片.png-43.9kB

livy 的查询spark REST接口

图片.png-59.1kB

图片.png-71.1kB

测试实例二:
 Data Refine
   下载需要bank数据,http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip
   首先,将csv格式数据转成Bank对象RDD,并过滤表头列

   上传到主节点: 
      unzip bank.zip

图片.png-39.5kB


hdfs dfs -mkdir /tmp/test
hdfs dfs -put bank-full.csv bank.csv bank-names.txt /tmp/test 

图片.png-16.5kB


创建一个spark的notebook 

val bankText = sc.textFile("/tmp/test/bank-full.csv")

case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer)

val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map(
    s=>Bank(s(0).toInt, 
            s(1).replaceAll("\"", ""),
            s(2).replaceAll("\"", ""),
            s(3).replaceAll("\"", ""),
            s(5).replaceAll("\"", "").toInt
        )
)

// Below line works only in spark 1.3.0.
// For spark 1.1.x and spark 1.2.x,
// use bank.registerTempTable("bank") instead.
bank.toDF().registerTempTable("bank")

图片.png-55.5kB


执行以下语句,可看到年龄的分布:

%sql select age, count(1) from bank where age < 30 group by age order by age

图片.png-50.8kB

图片.png-57.8kB


根据婚姻状况选项,查看年龄分布状况:
%sql select age, count(1) from bank where marital="${marital=single,single|divorced|married}" group by age order by age

图片.png-39.8kB

图片.png-86.1kB

spark job 的分布

图片.png-117.7kB

使用zeppelin 的配置 hive 连接

create Interpreters

图片.png-24.6kB

图片.png-86.4kB

artifact的骨架配置

/opt/cloudera/parcels/CDH/jars/hive-jdbc-2.1.1-cdh6.3.2.jar 
/opt/cloudera/parcels/CDH/jars/hive-service-rpc-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-cli-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-service-2.1.1-cdh6.3.2.jar  
/opt/cloudera/parcels/CDH/jars/hive-common-2.1.1-cdh6.3.2.jar   
/opt/cloudera/parcels/CDH/jars/hive-serde-2.1.1-cdh6.3.2.jar

保存退出:

图片.png-50.5kB

猜你喜欢

转载自blog.51cto.com/flyfish225/2561963