CDH使用CM安装整合livy和zepplin
2021-08-17 实践可用,大多数坑都遇到了,分享下。
安装的步骤分为 前提准备、制作parcel和csd包、使用CM安装livy和zepplin
版本信息:
CentOS7
、 CDH 6.3.2
、 livy 0.5.0
、 zepplin 0.8.2
前提准备
-
首先你需要JDK1.8及以上、maven3、git。我这里linux系统里没装maven和git,就先使用已经安装好上述工具的windows操作了一下。需要从livy、zepplin官网上下载我们安装的软件包:
livy-0.5.0-incubating-bin.zip
和zeppelin-0.8.2-bin-all.tgz
。链接:livy官网下载地址
zeppelin官网下载地址 -
找个目录,使用git下载一个项目:
git clone https://github.com/alexjbush/livy_zeppelin_cdh_csd_parcels.git
注意,我clone的时候发现clone下来的项目中丢了很多文件,导致后面出错。于是我去github:livy_zeppelin_cdh_csd_parcels上去下载了它的zip文件。这才正常。 -
继续下载一个项目:
git clone https://github.com/cloudera/cm_ext.git
。把文件包扔到上述2中的livy_zeppelin_cdh_csd_parcels目录中去。
制作parcel和csd包
主要我们是要去执行livy_zeppelin_cdh_csd_parcels项目中的build.sh文件,在这个文件目录下。
步骤一:我们需要编辑下build.sh
把下面几行的版本更新了,LIVY_MD5、ZEPPELIN_MD5校验比较烦,直接注释掉,略过。
CM_EXT_BRANCH=cm5-5.12.0
LIVY_URL=http://apache.mirror.anlx.net/incubator/livy/0.5.0-incubating/livy-0.5.0-incubating-bin.zip
#LIVY_MD5="cc9dc5518e8c178808707eaa68b7672a"
LIVY_VERSION=0.5.0
ZEPPELIN_URL=http://apache.mirror.anlx.net/zeppelin/zeppelin-0.8.2/zeppelin-0.8.2-bin-all.tgz
#ZEPPELIN_MD5="d87a285c0640ed02ad74bea219525364"
ZEPPELIN_VERSION=0.8.2
#需要注释的代码:
#livy_md5="$( md5sum $livy_archive | cut -d' ' -f1 )"
# if [ "$livy_md5" != "$LIVY_MD5" ]; then
# echo ERROR: md5 of $livy_archive is not correct
# exit 1
#fi
#zeppelin_md5="$( md5sum $zeppelin_archive | cut -d' ' -f1 )"
# if [ "$zeppelin_md5" != "$ZEPPELIN_MD5" ]; then
# echo ERROR: md5 of $zeppelin_archive is not correct
# exit 1
# fi
步骤二:把下载文件放进去
由于之前我们已经下载了livy-0.5.0-incubating-bin.zip和zeppelin-0.8.2-bin-all.tgz,直接放到livy_zeppelin_cdh_csd_parcels目录下。cm_ext也放下,这样脚本里的下载就不会执行了,节约时间。
build.sh这个脚本的可选参数为 parcel和csd我们都需要执行下,我们windows下可以使用git工具执行命令:
#首先先给个权限
chmod 755 build.sh
sh build.sh parcel
sh build.sh csd
执行后肯定是报错啦,主要是下面几个坑:
wget 找不到命令
,我们可以安装一个windows版本的wget.exe,然后配置好环境变量,不会配也行,直接build.sh中找到wget代码,改成你下载wget的存放地址如:D:\wget\wget.exe- 顺利的情况你会执行到这一步:
tar zcvhf ./$zeppelin_built_folder/$zeppelin_parcel_name $zeppelin_parcel_folder --owner=root --group=root
此时LIVY-0.5.0_build目录已经有了,也有LIVY-0.5.0-el7.parcel文件了,但是下面这个命令会出错,原因是我使用windows是处理不了LIVY-0.5.0-el7.parcel的,因此我直接把livy_zeppelin_cdh_csd_parcels压缩扔到我们Linux系统中。
java -jar cm_ext/validator/target/validator.jar -f ./$zeppelin_built_folder/$zeppelin_parcel_name
步骤三:在linux系统中再次执行build.sh脚本
这时候执行基本就不会报错了。
此时还缺一个文件:LIVY-0.5.0-el7.parcel.sha,可以用如下命令在LIVY-0.5.0_build目录下执行。zepplin同样操作即可
sha1sum ./LIVY-0.5.0-el7.parcel |awk '{print $1}' > ./LIVY-0.5.0-el7.parcel.sha
最后生成的需要文件如下:
livy:
LIVY-0.5.0-el7.parcel
、LIVY-0.5.0-el7.parcel.sha
、manifest.json
、LIVY-0.5.0.jar
zepplin:
ZEPPELIN-0.8.2-el7.parcel
、ZEPPELIN-0.8.2-el7.parcel.sha
、
manifest.json
、ZEPPELIN-0.8.2.jar
步骤四:部署parcel和csd
接下来我们找到安装cm的目录假设是/opt/cloudera/
- 把parcel、parcel.sha 文件cp到
/opt/cloudera/parcel-repo
目录下 - 把jar、manifest.json 文件cp到
/opt/cloudera/csd
目录下,上述两个文件manifest.json可以合成一个,自己编辑下,放parcels这个数组里就好。
步骤五:重启下cm-server
# cdh 6.3.2版本重启
systemctl restart cloudera-scm-server
# cdh 5.16.2/版本
#/opt/cm-5.16.2/etc/init.d/cloudera-scm-server start
坑
报错:
这个错是cm-server重启的时候日志里的,可以观察下日志,如果有错,在添加服务的时候是不会出现livy的。
Could not install csd [LIVY-0.5.0]. Skipping java.lang.IllegalArgumentException: Could not read source file [aux/client/livy-env.sh]
解决
LIVY-0.5.0.jar包里的文件aux找不到了,也不知道为啥livy_csd_build 里面是 _aux ,需要把livy_csd_build 里的_aux目录重命名改成aux目录
重新打LIVY-0.5.0.jar包
jar -cvf ./$JARNAME -C ${livy_csd_build_folder} .
步骤六:CM添加服务配置文件
- 在cm里 集群 – parcel – 找到 LIVY - 分配 、 激活
- 在cm里添加服务 livy 配置数据存储地址,如:/opt/cdh/livy/lvy 选择节点。
- Livy配置文件 关键字搜
Livy Superusers
增加 livy 和 hue - zeppelin配置文件:
关键字搜:Zeppelin Java Options zeppelin_java_options Zeppelin Server Default Group
-Xmx1g -Xms1g
启动报错信息
一、启动失败报错:Error found before invoking supervisord: 'getpwnam(): name not found: livy'
解决:
1去选择的节点增加用户、组、权限
groupadd -r zeppelin
useradd -r -g zeppelin zeppelin
groupadd -r livy
useradd -r -g livy livy
cd /var/log
mkdir livy
chown livy:livy /var/log/livy
mkdir -p /var/log/zeppelin
chown zeppelin:zeppelin /var/log/zeppelin
2在HDFS的core-site.xml 中添加一下配置:
<property>
<name>hadoop.proxyuser.livy.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.livy.hosts</name>
<value>*</value>
</property>
二、启动报错没有权限Permission deny
:
解决:把/opt/cloudera/parcels/LIVY-0.5.0/bin 下 chmod 755
三、启动报错Non-zero error code running command: hdfs dfs -put -f /var/run/cloudera-scm-agent/process/645-zeppelin-ZEPPELIN_SERVER/zeppelin-conf/interpreter.json file:///opt/cdh/zeppelin/conf
解决:
把opt/cdh/zeppelin/目录的所属用户组修改为zeppelin就好了 chown zeppelin:zeppelin /opt/cdh/zeppelin/
步骤七:访问zepplin
xxx.xxx.xxx.xxx:port 端口默认8080,可以自己在cm配置中改下。
访问不了:
配置zeppelin-conf/zeppelin-site.xml 的 Zeppelin Server 高级配置代码段(安全阀):(配置好就可以访问啦)
<property>
<name>zeppelin.server.addr</name>
<value>0.0.0.0</value>
<description>Server binding address</description>
</property>
重启cm服务
搞定
好,后面使用有问题再看,莫莫绵~,溜了溜了。
更新问题:
上述方法完成后发现,cm服务重启后会导致配置文件重置,我们希望重启后保留自定义配置
:
解决:
找到:livy_zeppelin_cdh_csd_parcels-master\zeppelin_csd_build\scripts\control.py 文件,打开找到如图的代码。
修改这部分为图中所示即可:
if not os.path.exists(os.environ["ZEPPELIN_CONF_FS_DIR"][7:]):
run_command("hdfs dfs -mkdir -p %s" % (os.environ["ZEPPELIN_CONF_FS_DIR"]))
if not os.path.exists("%s/interpreter.json" %(os.environ["ZEPPELIN_CONF_FS_DIR"][7:])):
run_command("hdfs dfs -put -f %s %s" % (completed_filename, os.environ["ZEPPELIN_CONF_FS_DIR"]))
if not os.path.exists(os.environ["ZEPPELIN_NOTEBOOK_DIR"][7:]):
run_command("hdfs dfs -mkdir -p %s" % (os.environ["ZEPPELIN_NOTEBOOK_DIR"]))