[关闭]
@zhangyy 2020-12-09T18:20:14.000000Z 字数 5514 阅读 674

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

大数据运维专栏


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

一:关于zepplin的介绍

  1. Apache Zeppelin 是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。
  2. Zeppelin 是一个提供交互数据分析且基于Web的笔记本。方便你做出可数据驱动的、可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL Hive MarkdownShell等等。
  3. Zeppelin 功能:
  4. 数据提取
  5. 数据发掘
  6. 数据分析
  7. 数据可视化展示以及合作

图片.png-200.4kB

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

2.1 编译环境准备

  1. 建议使用国外云主机 flyfish 这边用的是香港的云主机
  2. 系统: ubuntu 16.0.4x64
  3. jdk: jdk1.8.0_261
  4. maven: apache-maven-3.6.3
  5. jdk maven 安装目录:/software
  6. 环境变量配置:
  7. vim /etc/profile
  8. ----
  9. # jdk
  10. export JAVA_HOME=/software/jdk1.8.0_261
  11. export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
  12. PATH=$PATH:$HOME/bin:$JAVA_HOME/bin
  13. # maven
  14. export MAVEN_HOME=/software/apache-maven-3.6.3
  15. PATH=$PATH:$HOME/bin:$MAVEN_HOME/bin
  16. ----
  17. java -version
  18. maven -version

图片.png-47.9kB


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

  1. 编译步骤如下:
  2. 1. 下载LivyZeppelin源码并编译
  3. 2. 生成LivyZeppelinParcel
  4. 3. 下载编译Cloudera提供的cm_ext工具,用于校验parcel及生成manifest.json文件
  5. 4. 生成LivyZeppelincsd文件,用于CMLivyZeppelin服务的识别

  1. 下载 打包
  2. cd /software
  3. git clone https://github.com/alexjbush/livy_zeppelin_cdh_csd_parcels.git
  4. flyfish 这里已经下载好了

图片.png-18kB

图片.png-38.5kB


  1. 然后修改打包源的build.sh
  2. cd /software/livy_zeppelin_cdh_csd_parcels
  3. vim build.sh
  4. ---
  5. 主要修改的是上面 包的路径:
  6. CM_EXT_BRANCH=cm5-5.15.0
  7. LIVY_URL=http://apache.mirror.anlx.net/incubator/livy/0.7.0-incubating/apache-livy-0.7.0-incubating-bin.zip
  8. LIVY_MD5="2c5b63757414af16da308e63749e1ae6"
  9. LIVY_VERSION=0.7.0
  10. ZEPPELIN_URL=http://apache.mirror.anlx.net/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz
  11. ZEPPELIN_MD5="e9d2cd60f6900eb6435b780a1292106e"
  12. ZEPPELIN_VERSION=0.8.2
  13. ---
  14. 切记 因为包 版本 不同 md5 也不同

图片.png-53.7kB

  1. 执行编译 生成parcels
  2. chmod +x build.sh
  3. ./build.sh parcel

图片.png-51.1kB

图片.png-44.8kB

图片.png-38.3kB


  1. 打出parcels 放在:ZEPPELIN-0.8.2_build 下面
  2. cd ZEPPELIN-0.8.2_build
  3. manifest.json ZEPPELIN-0.8.2-el7.parcel 文件
  4. LIVY 放在:
  5. cd LIVY-0.7.0_build
  6. LIVY-0.7.0-el7.parcel manifest.json

图片.png-18.6kB

图片.png-21.3kB

  1. 生成 csd jar
  2. cd /software/livy_zeppelin_cdh_csd_parcels
  3. ./build.sh csd

图片.png-48.4kB

图片.png-55.1kB

  1. 生成 jar
  2. ls -ld *.jar

图片.png-17.6kB

  1. mkdir zepplin-parcels
  2. mv ZEPPELIN.jar zeppelin-parcels
  3. mv ZEPPELIN-0.8.2_build/* zeppelin-parcels
  4. mv LIVY-0.7.0.jar livy-parcels/
  5. cd LIVY-0.7.0_build/
  6. mv * ../livy-parcels/
  7. tar -zcvf zeppelin-parcels.tar.gz zeppelin-parcels
  8. tar -zcvf livy-parcels.tar.gz livy-parcels
  9. 然后把 zeppelin-parcels.tar.gz livy-parcels.tar.gz 这两个包 下载下来 拿去 和 CDH 集成

图片.png-50kB

图片.png-55.1kB


三:zeppelin 与CDH的集成

  1. cd /var/www/html/
  2. mkdir livy zeppelin
  3. 上传zeppelin-parcels.tar.gz 这个包 /var/www/html/zeppelin 下面
  4. 上传livy-parcels.tar.gz 这个包到 /var/www/html/livy 下面
  5. 解压 zeppelin-parcels.tar.gz 然后 manifest.json ZEPPELIN-0.8.2-el7.parcel ZEPPELIN-0.8.2.jar
  6. 这三个文件 移动 /var/www/html/zeppelin 下面
  7. 同样将 livy-parcels.tar.gz 这个包 解压 LIVY-0.7.0-el7.parcel LIVY-0.7.0.jar manifest.json 这三个文件 移动到 /var/www/html/livy 下面

图片.png-48.8kB

  1. cd /var/www/html/livy
  2. mv LIVY-0.7.0.jar /opt/cloudera/csd/
  3. cd /var/www/html/zeppelin
  4. mv mv ZEPPELIN-0.8.2.jar /opt/cloudera/csd/
  5. chown cloudera-scm:cloudera-scm /opt/cloudera/csd -R
  6. service cloudera-scm-server restart

图片.png-33.6kB

  1. CDH 上面 配置 parcels 目录
  2. http://192.168.11.37/livy
  3. http://192.168.11.37/zeppelin

图片.png-90.1kB

图片.png-69.3kB

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

图片.png-9.2kB

图片.png-65.4kB

图片.png-63.7kB


  1. 从新启动CM 加载扩展 jar

图片.png-55kB

图片.png-67.2kB

  1. 添加livy zeppelin 服务

图片.png-67.9kB

图片.png-88.9kB

  1. 添加livy 服务依赖

图片.png-64.9kB

图片.png-47.1kB

图片.png-54.3kB

图片.png-74.7kB

图片.png-80.5kB

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

图片.png-9.5kB

  1. 解决办法:
  2. 解决办法:
  3. Livy REST Server所在服务器上增加livy用户及用户组
  4. groupadd livy
  5. useradd livy -g livy
  6. chown livy:livy /var/log/livy
  7. HDFScore-site.xml 中添加一下配置:
  8. <property>
  9. <name>hadoop.proxyuser.livy.groups</name>
  10. <value>*</value>
  11. </property>
  12. <property>
  13. <name>hadoop.proxyuser.livy.hosts</name>
  14. <value>*</value>
  15. </property>

图片.png-8.4kB

图片.png-92.8kB

  1. 添加完之后从新启动HDFS

图片.png-59.8kB

  1. 添加zeppelin 服务
  2. 在主机 节点 上创建 zepplin 的用户和组
  3. Zeppelin Server 服务所在的节点添加 zeppelin 用户和角色:
  4. groupadd zeppelin
  5. useradd zeppelin -g zeppelin
  6. mkdir -p /var/log/zeppelin
  7. chown zeppelin:zeppelin /var/log/zeppelin

图片.png-34.1kB

图片.png-80.1kB

图片.png-44.2kB

图片.png-93kB

  1. 报错:
  2. 由于错误 java.lang.IllegalArgumentException: The variable [${zeppelin_java_options}] does not have a corresponding value.,角色启动失败。
  3. 解决:
  4. ZEPPELIN --> 配置 --> 搜索 zeppelin_java_options --> 添加参数 -Xms1024m --> 重启ZEPPELIN 服务

图片.png-44kB

  1. 报错:
  2. mkdir: `file:///var/local/zeppelin/conf': Input/output error
  3. 解决办法:
  4. ZEPPELIN --> 配置 --> 搜索 dir --> 修改配置 --> 重启ZEPPELIN 服务
  5. hdfs dfs -mkdir -p /var/local/zeppelin/conf
  6. hdfs dfs -mkdir -p /var/local/zeppelin/data/notebook
  7. hdfs dfs -chmod 777 /var/local/zeppelin/conf
  8. hdfs dfs -chmod 777 /var/local/zeppelin/data/notebook

图片.png-42.5kB

图片.png-67.7kB

图片.png-104.7kB

图片.png-79.4kB


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

图片.png-29.1kB

图片.png-28.2kB

  1. 打开web:
  2. http://192.168.11.37:8081

图片.png-46.3kB

四: 关于zeppelin 的测试

图片.png-62.8kB

  1. 测试实例一:
  2. 上传测试数据
  3. vim test.txt
  4. ---
  5. hadoop hive
  6. spark zeppelin
  7. hadoop spark
  8. ---
  9. hdfs dfs -put test.txt /tmp

图片.png-39.3kB

  1. 运行spark 测试程序
  2. %spark
  3. val textFile = spark.read.textFile("/tmp/test.txt")
  4. textFile.count()
  5. textFile.first()

图片.png-24.2kB

  1. 输出结果

图片.png-43.9kB

  1. livy 的查询spark REST接口

图片.png-59.1kB

图片.png-71.1kB

  1. 测试实例二:
  2. Data Refine
  3. 下载需要bank数据,http://archive.ics.uci.edu/ml/machine-learning-databases/00222/bank.zip
  4. 首先,将csv格式数据转成Bank对象RDD,并过滤表头列
  5. 上传到主节点:
  6. unzip bank.zip

图片.png-39.5kB


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

图片.png-16.5kB


  1. 创建一个sparknotebook
  2. val bankText = sc.textFile("/tmp/test/bank-full.csv")
  3. case class Bank(age:Integer, job:String, marital : String, education : String, balance : Integer)
  4. val bank = bankText.map(s=>s.split(";")).filter(s=>s(0)!="\"age\"").map(
  5. s=>Bank(s(0).toInt,
  6. s(1).replaceAll("\"", ""),
  7. s(2).replaceAll("\"", ""),
  8. s(3).replaceAll("\"", ""),
  9. s(5).replaceAll("\"", "").toInt
  10. )
  11. )
  12. // Below line works only in spark 1.3.0.
  13. // For spark 1.1.x and spark 1.2.x,
  14. // use bank.registerTempTable("bank") instead.
  15. bank.toDF().registerTempTable("bank")

图片.png-55.5kB


  1. 执行以下语句,可看到年龄的分布:
  2. %sql select age, count(1) from bank where age < 30 group by age order by age

图片.png-50.8kB

图片.png-57.8kB


  1. 根据婚姻状况选项,查看年龄分布状况:
  2. %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

  1. spark job 的分布

图片.png-117.7kB

  1. 使用zeppelin 的配置 hive 连接
  2. create Interpreters

图片.png-24.6kB

图片.png-86.4kB

  1. artifact的骨架配置
  2. /opt/cloudera/parcels/CDH/jars/hive-jdbc-2.1.1-cdh6.3.2.jar
  3. /opt/cloudera/parcels/CDH/jars/hive-service-rpc-2.1.1-cdh6.3.2.jar
  4. /opt/cloudera/parcels/CDH/jars/hive-cli-2.1.1-cdh6.3.2.jar
  5. /opt/cloudera/parcels/CDH/jars/hive-service-2.1.1-cdh6.3.2.jar
  6. /opt/cloudera/parcels/CDH/jars/hive-common-2.1.1-cdh6.3.2.jar
  7. /opt/cloudera/parcels/CDH/jars/hive-serde-2.1.1-cdh6.3.2.jar
  8. 保存退出:

图片.png-50.5kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注