k8s中摆设hive,包罗客户端及服务端

打印 上一主题 下一主题

主题 868|帖子 868|积分 2604

(作者:陈玓玏)



一、前提


  • 摆设好了k8s;
  • 摆设好了hadoop;
二、镜像封装

因为hive是基于hadoop的,而我们已经摆设好了hadoop,以是直接通过现有hadoop的镜像来封装hive的镜像。helm上也有可以直接利用的chart,但是版本可能和我们需要的不一样,以是还是自己封装比较好。
首先查一下我们的镜像,因为我的hadoop是用helm摆设的,需要先明确一下。
  1. sudo docker images |grep hadoop
复制代码

用的是3.3.2版本,镜像名是farberg/apache-hadoop。
编写dockerfile如下:
  1. FROM farberg/apache-hadoop:3.3.2
  2. RUN rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone
  3. RUN export LANG=zh_CN.UTF-8
  4. RUN wget https://mirrors.aliyun.com/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
  5. ENV HIVE_VERSION 3.1.3
  6. RUN tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/ && mv /opt/apache-hive-3.1.3-bin /opt/hive
  7. ENV HIVE_HOME=/opt/hive
  8. ENV PATH=$HIVE_HOME/bin:$PATH
  9. #这里mysql的jar包的版本要和后面部署的mysql一致
  10. RUN wget https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.0.32/mysql-connector-j-8.0.32.jar && mv mysql-connector-j-8.0.32.jar /opt/hive/lib/
  11. WORKDIR /opt/
  12. # Hdfs ports
  13. EXPOSE 50010 50020 50070 50075 50090 8020 9000
  14. # Mapred ports
  15. EXPOSE 19888
  16. #Yarn ports
  17. EXPOSE 8030 8031 8032 8033 8040 8042 8088
  18. #Other ports
  19. EXPOSE 49707 2122
复制代码
hive的镜像在这里下载比较快:
https://mirrors.aliyun.com/apache/
dockerfile编写好之后,通过以下命令构建镜像:
  1. sudo docker build -t ccr.ccs.tencentyun.com/cube-studio/hadoop-hive:v3.3.2-3.1.3 .
复制代码
镜像构建后通过以下命令推送:
  1. sudo docker push ccr.ccs.tencentyun.com/cube-studio/hadoop-hive:v3.3.2-3.1.3
复制代码
推送好之后,在cube studio平台上,新建一个pipeline,利用自界说镜像模板,填写镜像为ccr.ccs.tencentyun.com/cube-studio/hadoop-hive:v3.3.2-3.1.3,debug,检查目录对不对,检查情况变量是否正确,在命令行输入hive命令,看是否能正常执行。

都正常则表明镜像是没题目标,可以进行下一步了。
三、摆设mysql

这里之前写过了怎么在k8s摆设mysql,以是直接用就可以了。文章链接:https://blog.csdn.net/weixin_39750084/article/details/136366800
四、摆设hive

  1. apiVersion: v1
  2. kind: ConfigMap
  3. metadata:
  4.   name: hive-custom-config-cm
  5.   labels:
  6.     app: hive
  7. data:
  8.   bootstrap.sh: |-
  9.     #!/bin/bash
  10.     cd /root/bootstrap
  11.     # Apply custom config file context
  12.     cp hive-site.xml $HIVE_HOME/conf/
  13.     cp core-site.xml $HADOOP_HOME/etc/hadoop/
  14.     cp yarn-site.xml $HADOOP_HOME/etc/hadoop/
  15.     # initSchema
  16.     $HADOOP_HOME/bin/hadoop fs -test -e '/user/hive/warehouse'
  17.     if [ ! $? -eq 0 ]; then
  18.       $HADOOP_HOME/bin/hadoop fs -mkdir -p /tmp
  19.       $HADOOP_HOME/bin/hadoop fs -mkdir -p /user/hive/warehouse
  20.       $HADOOP_HOME/bin/hadoop fs -chmod g+w /tmp
  21.       $HADOOP_HOME/bin/hadoop fs -chmod g+w /user/hive/warehouse
  22.       $HIVE_HOME/bin/schematool -dbType mysql -initSchema --verbose &
  23.       #等待初始化运行结束,否则会报错FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
  24.       #若出现此报错,需要进入hive的pod中,手动执行命令hive --service metastore &
  25.       sleep 10
  26.     fi
  27.     $HIVE_HOME/bin/hiveserver2 &
  28.     $HIVE_HOME/bin/hive --service metastore &
  29.     cp $HIVE_HOME/conf/hive-env.sh.template $HIVE_HOME/conf/hive-env.sh && echo "export HADOOP_CLIENT_OPTS="-Xmx512m -XX:MaxPermSize=1024m \$HADOOP_CLIENT_OPTS"" >> $HIVE_HOME/conf/hive-env.sh
  30.     # keep running
  31.     sleep infinity
  32.   hive-site.xml: |-
  33.     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  34.     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  35.     <configuration>
  36.       <property>
  37.         <name>hive.server2.enable.doAs</name>
  38.         <value>false</value>
  39.       </property>
  40.       <property>
  41.         <name>javax.jdo.option.ConnectionUserName</name>
  42.         <value>root</value>
  43.       </property>
  44.       <property>
  45.         <name>javax.jdo.option.ConnectionPassword</name>
  46.         <value>admin</value>
  47.       </property>
  48.       <property>
  49.         <name>javax.jdo.option.ConnectionURL</name>
  50.         <value>jdbc:mysql://mysql-service.infra:3306/metastore?createDatabaseIfNotExist=true&amp;useSSL=false</value>
  51.       </property>
  52.       <property>
  53.         <name>javax.jdo.option.ConnectionDriverName</name>
  54.         <value>com.mysql.jdbc.Driver</value>
  55.       </property>
  56.       <property>
  57.         <name>system:java.io.tmpdir</name>
  58.         <value>/tmp</value>
  59.       </property>
  60.       <property>
  61.         <name>system:user.name</name>
  62.         <value>hive</value>
  63.       </property>
  64.       <property>
  65.         <name>hive.server2.authentication</name>
  66.         <value>NOSASL</value>
  67.       </property>
  68.       <!--设置HDFS地址-->
  69.       <property>
  70.         <name>fs.defaultFS</name>
  71.         <value>hdfs://hadoop-hadoop-hdfs-nn.default:9000</value>
  72.       </property>
  73.     </configuration>
  74.   core-site.xml: |-
  75.     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  76.     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  77.     <configuration>
  78.         <property>
  79.                 <name>fs.defaultFS</name>
  80.                 <value>hdfs://hadoop-hadoop-hdfs-nn.default:9000</value>
  81.         </property>
  82.     </configuration>
  83.   yarn-site.xml: |-
  84.     <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  85.     <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  86.     <configuration>
  87.         <!-- Site specific YARN configuration properties -->
  88.         <property>
  89.                 <name>yarn.resourcemanager.hostname</name>
  90.                 <value>hadoop-hadoop-yarn-rm-0.hadoop-hadoop-yarn-rm.default</value>
  91.         </property>
  92.     </configuration>
复制代码
deployment及service等:
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4.   name: hive
  5. spec:
  6.   replicas: 1
  7.   revisionHistoryLimit: 10
  8.   selector:
  9.     matchLabels:
  10.       app: hive
  11.   template:
  12.     metadata:
  13.       labels:
  14.         app: hive
  15.     spec:
  16.       containers:
  17.         - name: hive
  18.           image: ccr.ccs.tencentyun.com/cube-studio/hadoop-hive:v3.3.2-3.1.3
  19.           command: ["bash", "-c", "bash /root/bootstrap/bootstrap.sh"]
  20.           ports:
  21.             - containerPort: 10000
  22.             - containerPort: 10002
  23.             - containerPort: 9083
  24.           env:
  25.             - name: HADOOP_CONF_DIR
  26.               value: /opt/hadoop/etc/hadoop
  27.           volumeMounts:
  28.             - name: hive-custom-config-volume
  29.               mountPath: /root/bootstrap
  30.           readinessProbe:
  31.             initialDelaySeconds: 20
  32.             periodSeconds: 5
  33.             tcpSocket:
  34.               port: 10000
  35.       volumes:
  36.         - name: hive-custom-config-volume
  37.           configMap:
  38.             name: hive-custom-config-cm
  39. ---
  40. kind: Service
  41. apiVersion: v1
  42. metadata:
  43.   labels:
  44.     app: hive
  45.   name: hive-service
  46. spec:
  47.   ports:
  48.     - port: 10000
  49.       targetPort: 10000
  50.       name: thrift
  51.     - port: 10002
  52.       targetPort: 10002
  53.       name: webui
  54.     - port: 9083
  55.       targetPort: 9083
  56.       name: metastore
  57.   selector:
  58.     app: hive
  59.   type: NodePort
复制代码
两个希奇的bug:

摆设好之后,我们可以进pod查察一下hive的日志,像我遇到一个情况就是,hive能用,可以查数据库列表,表列表,但不能插入数据,看pod日志发现报错,重启pod时,再次初始化出现错误Error: Table ‘CTLGS‘ already exists (state=42S01,code=1050),需要进入mysql,删除metastore这个库,再重启hive的pod进行初始化。如果再次进入hive时,不能执行命令,报错java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.Session,表示metastore没重启成功,需要进入hive的pod手动执行一下hive --service metastore &。
不能插入数据的题目,后来发现是没有配置hdfs的地点,在yaml内里加上这个配置就没题目了!须要的配置项肯定不能漏掉!!否则就会出现本地能查到数据,但hdfs中查不到的情况,这样换一台呆板就不能用了!
五、验证

登录ui界面,可以验证是否成功。

六、客户端利用hive


  • 验证jdk,通过java -version验证已安装jdk,但没有设置JAVA_HOME,vi ~/.bashrc,设置一下JAVA_HOME,export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64,再source ~/.bashrc让其生效,再次验证,jdk版本只能是8,如果是别的版本,记得更换;jdk最好是用java8,如果版本不对,可以先卸载,再安装正确的版本,再设置情况变量。如果不想总修改情况变量,那么设置/etc/profile比设置~/.bashrc更好。
  • 下载hive,跟服务端下载同一个版本:https://mirrors.aliyun.com/apache/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
  • 解压,tar -zxvf apache-hive-3.1.3-bin.tar.gz
  • 编辑配置项:
  1. cd apache-hive-3.1.3-bin/conf
  2. vi hive-site.xml
复制代码
把下面的配置项粘到hive-site.xml:
  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>  
  4.   
  5.   <property>  
  6.     <name>hive.metastore.warehouse.dir</name>  
  7.     <value>/user/hive/warehouse</value>  
  8.   </property>  
  9.    
  10.   <property>  
  11.     <name>hive.metastore.local</name>  
  12.     <value>false</value>  
  13.   </property>  
  14.   
  15.   <property>  
  16.     <name>hive.metastore.uris</name>  
  17.     <value>thrift://hive-service.default:9083</value>  
  18.   </property>  
  19.   
  20. </configuration>  
复制代码

  • 配置hive的情况变量
  1. vi /etc/profile
  2. export HIVE_HOME=/mnt/admin/apache-hive-3.1.3-bin
  3. export HADOOP_HOME=/mnt/admin/hadoop-3.3.6
  4. export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
  5. export HADOOP_CONF_DIR=/mnt/admin/hadoop-3.3.6/etc/hadoop
  6. export PATH=$PATH::$HIVE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin
  7. source /etc/profile
复制代码
情况变量写在/etc/profile更好,因为~/.bashrc是暂时的,重启一下pod就复原了,但/etc/profile是全局的,避免一直要重复设置。

  • 配置hadoop的yarn
    把/mnt/admin/hadoop-3.3.6/etc/hadoop/yarn-site.xml配置成以下这样:
  1. <configuration>
  2.     <property>
  3.         <name>yarn.nodemanager.aux-services</name>
  4.         <value>mapreduce_shuffle</value>
  5.     </property>
  6.     <property>
  7.         <name>yarn.resourcemanager.hostname</name>
  8.         <value>hadoop-hadoop-yarn-rm-0.hadoop-hadoop-yarn-rm.default</value>
  9.     </property>
  10.     <property>
  11.         <name>yarn.resourcemanager.address</name>
  12.         <value>hadoop-hadoop-yarn-rm-0.hadoop-hadoop-yarn-rm.default:8032</value>
  13.     </property>
  14.         <property>
  15.         <name>yarn.resourcemanager.scheduler.address</name>
  16.         <value>hadoop-hadoop-yarn-rm-0.hadoop-hadoop-yarn-rm.default:8030</value>
  17.     </property>
  18.     <property>
  19.         <name>yarn.nodemanager.env-whitelist</name>
  20.         <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
  21.     </property>
  22. </configuration>
复制代码
操纵完之后,执行hive,可以进入就算成功。

执行hive时可能出现一个错误:
  1. Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x8
  2. at [row,col,system-id]: [3219,96,"file:/mnt/admin/apache-hive-3.1.3-bin/conf/hive-site.xml"],
复制代码
这是因为xml模板中有个特殊字符&#8,找到对应位置,去掉即可;
测试语句示例:
  1. CREATE  TABLE test(  
  2.   name string,   
  3.   num int)
  4. PARTITIONED BY (`date` string)
  5. ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' stored as textfile;
  6. insert into test partition (`date`='20240523') (name,num) values ('cdl',100);
  7. insert into test partition (`date`='20240522') (name,num) values ('cdl',100);
复制代码
看是否能正确建表,正确插入数据,正确查询,hdfs中也能正确显示。
参考地点

https://www.cnblogs.com/liugp/p/16747557.html#1%E6%9E%84%E5%BB%BA%E9%95%9C%E5%83%8F
https://blog.csdn.net/chenleiking/article/details/82492282

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表