Hive源码学习【1】——Windows WSL Hive3.x安装与调试(1)

举报
想要一只猫 发表于 2020/09/25 23:06:09 2020/09/25
【摘要】 本文主要进行Hive/Hadoop的安装配置,最后实现IDEA远程调试Hive代码

准备

  • Hive-3.1.2安装包和源码包下载

  • Hadoop-3.2.1安装包下载

  • Java1.8安装包下载与环境配置

  • Maven安装包下载

  • Windows WSL通过Microsoft Store安装(本文安装Ubuntu 18.04 LTS)

  • MySQL(使用derby可忽略)

  • IDEA

Hadoop安装与配置

  • Hadoop环境变量配置

export HADOOP_HOME=/path/to/hadoop-3.2.1    # hadoop解压包的路径                                                             
export PATH=$HADOOP_HOME/bin:$PATH
命令行输入hadoop version查看环境是否配置成功

  • Hadoop配置文件

    进入hadoop下的etc/hadoop目录分别编辑配置文件。

    core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://localhost:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/tmp/hadoop/tmp</value>
  </property>
</configuration>

    hdfs-site.xml

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>
  <property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>/tmp/hadoop/namenode</value>
  </property>
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>/tmp/hadoop/datanode</value>
  </property>
  <property>
    <name>dfs.http.address</name>
    <value>localhost:50070</value>
  </property>
</configuration>

    yarn-site.xml

<configuration>
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>

    mapred-site.xml

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

    hadoop-env.sh

# 直接找到export JAVA_HOME条目,取消注释,或者直接新增行
export JAVA_HOME=/path/to/java

    workers文件保持默认的localhost无需改变,即在本地启动一个datanode


  • 执行namenode初始化

hadoop namenode -format
  • 启动hadoop相关组件

./sbin/start-all.sh

    可能报错localhost: ssh: connect to host localhost port 22: Connection refused。原因是sshd没有启动,启动sshd

sudo service ssh start

    ssh启动过程中可能还会有报错Could not load host key xxx,原因是WSL比较特殊,需要手动生成对应的主机秘钥文件(一般情况openssh安装会自动生成)

Could not load host key: /etc/ssh/ssh_host_rsa_key                                                                      
Could not load host key: /etc/ssh/ssh_host_ecdsa_key                                                                    
Could not load host key: /etc/ssh/ssh_host_ed25519_key

    现在分别生成对应key文件(也可以重装openssh)

ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key

     重启ssh

sudo service ssh restart

    之后生成用户秘钥文件

ssh-keygen -t rsa

    再将公钥添加到authorized_keys文件(用于实现免密登录localhost)

cat id_rsa.pub > authorized_keys

    测试ssh配置是否成功

ssh localhost

    至此,再次启动hadoop组件即可。

MySQL安装与配置

    MySQL用于作为Hive的metastore数据存储,也可使用默认的derby,则跳过此步骤。

# 安装mysql
sudo apt install mysql-server
sudo apt install mysql-client

# 启动mysql
sudo service mysql start

# 测试登录,mysql5.7默认root用户初始密码为空
mysql -u root

    新装MySQL登录root会存在权限问题,解决方法如此博客

Hive安装与配置

  • Hive环境变量配置

export HIVE_HOME=/path/to/hive                                                                     
export PATH=$HIVE_HOME/bin:$PATH
  • Hive配置文件配置

    进入hive的conf目录,复制生成hive-site.xml文件

cp hive-default.xml.template hive-site.xml

    编辑hive-site.xml文件

# 此项务必配置,否则之后进入hive命令行会报错
<property>
  <name>system:java.io.tmpdir</name>
  <value>/tmp/hive/java</value>
</property>
<property>
  <name>system:user.name</name>
  <value>${user.name}</value>
</property>

# MySQL相关配置
<property>
  <name>hive.metastore.db.type</name>
  <value>MYSQL</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>root</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>123456</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
</property>
<property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
</property>
  • MySQL Connector

    Maven仓库下载速度较快,这里使用mysql-connector-java-5.1.38.jar,下载并移至hive的lib目录下

  • 初始化Schema

schematool -dbType mysql -initSchema

# 报错1:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
# 原因:hadoop路径下的guava包与hive的lib下的guava包版本冲突
# 解决办法:删除hive的lib下的低版本的guava包

# 报错2:Illegal character entity: expansion character (code 0x8 at [row,col,system-id]: [3215,96,"file:/……/hive-site.xml"]
# 原因:hive-site.xml一些字符不符合xml文档格式规范(一般在description字段)
# 解决办法:根据指示删除相应字符即可
  • 测试Hive(先启动hadoop)

# 进入hive命令行
hive
# 创建表
create table test(id int);

# 退出hive命令行,查看hadoop是否创建相应目录,如果存在/user/hive/warehouse/test说明创建成功
hdfs dfs -ls /user/hive/warehouse

Hive源码编译

  • maven环境变量配置

export M2_HOME=/path/to/maven 
export PATH=$M2_HOME/bin:$PATH
  • 编译Hive项目

# 进入hive源码目录,执行编译
mvn compile -DskipTests
  • IDEA远程调试配置

    IDEA打开Hive项目,Run -> Edit Configurations -> 点击左上角+号,选择Remote ->配置Remote Debug

  • 进入hive debug模式

hive --debug

  • IDEA启动Remote Debug

    Run -> Debug 'Remote-HIVE'

     

    至此,在IDEA设置断点,在hive命令行输入测试命令即可进行源码调试

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。