下述安装操作是在Windows 11的Ubuntu Linux子系统上进行。
Ubuntu版本:18.04

1. Java安装

1.1 Java下载

官方下载太慢,在华为镜像上下载,地址:https://repo.huaweicloud.com/java/jdk/
image.png
根据自己系统选择合适的包下载即可,本次安装使用:jdk-8u191-linux-x64.tar.gz

1.2 安装

  1. # 将安装包上传至服务器上,并解压
  2. > tar -zxvf jdk-8u191-linux-x64.tar.gz
  3. # 添加环境变量
  4. > vim /etc/profile
  5. # 添加如下内容
  6. export JAVA_HOME=/home/soft/jdk1.8.0_191
  7. export PATH=$JAVA_HOME/bin:$PATH
  8. export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  9. # 让配置立即生效
  10. > source /etc/profile
  11. # 验证是否安装成功
  12. > java -version
  13. java version "1.8.0_191"
  14. Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
  15. Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

2. Hadoop安装

2.1 下载

国内下载镜像地址:https://mirrors.cnnic.cn/apache/
image.png
下载hadoop-3.2.3.tar.gz安装包。

2.2 安装

  • 解压,并配置环境变量。 ```shell

    解压

    cd /home/soft tar -zxvf hadoop-3.2.3.tar.gz

配置hadoop环境变量

vim /etc/profile

添加如下内容

export HADOOP_HOME=/home/soft/hadoop-3.2.2 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使配置生效

source /etc/profile ```

  • 配置hadoop依赖的java,修改hadoop-env.sh,添加如下内容,保存并退出

    1. export JAVA_HOME=/home/soft/jdk1.8.0_191
  • 修改core-site.xml配置文件

    1. > cd /home/soft/hadoop-3.2.2/etc/hadoop
    2. > vim core-site.xml

    标签下添加如下内容,保存并退出:

    1. <!-- NameNode的地址 -->
    2. <property>
    3. <name>fs.defaultFS</name>
    4. <value>hdfs://localhost:9000</value>
    5. </property>
    6. <!-- 指定hadoop运行时产生临时文件的存储目录 -->
    7. <property>
    8. <name>hadoop.tmp.dir</name>
    9. <value>/home/hadoop/tmp</value>
    10. </property>
    11. <!-- 表示设置 hadoop 的代理用户-->
    12. <property>
    13. <!--表示代理用户的组所属-->
    14. <name>hadoop.proxyuser.root.groups</name>
    15. <value>*</value>
    16. </property>
    17. <property>
    18. <!--表示任意节点使用 hadoop 集群的代理用户 hadoop 都能访问 hdfs 集群-->
    19. <name>hadoop.proxyuser.root.hosts</name>
    20. <value>*</value>
    21. </property>
  • 修改hdfs-site.xml文件

    1. > vim hdfs-site.xml

    添加如下内容,保存并退出:

    1. <property>
    2. <name>dfs.replication</name>
    3. <value>1</value>
    4. <description>数据块的备份数量,不能大于DataNode的数量</description>
    5. </property>
    6. <property>
    7. <name>dfs.namenode.name.dir</name>
    8. <value>/home/hadoop/namenode</value>
    9. <description>NameNode 需要存储数据的文件目录</description>
    10. </property>
    11. <property>
    12. <name>dfs.datanode.data.dir</name>
    13. <value>/home/hadoop/datanode</value>
    14. <description>DataNode 需要存放数据的文件目录</description>
    15. </property>
  • 修改yarn-site.xml配置文件

    1. > vim yarn-site.xml

    添加如下内容,保存并退出:

    1. <!-- ResourceManager的地址 -->
    2. <property>
    3. <name>yarn.resourcemanager.hostname</name>
    4. <value>localhost</value>
    5. </property>
    6. <!-- reducer获取数据的方式 -->
    7. <property>
    8. <name>yarn.nodemanager.aux-services</name>
    9. <value>mapreduce_shuffle</value>
    10. </property>
  • 修改mapred-site.xml配置文件

    1. > vim mapred-site.xml

    添加如下内容,保存并退出:

    1. <!-- 指定mr运行在yarn上 -->
    2. <property>
    3. <name>mapreduce.framework.name</name>
    4. <value>yarn</value>
    5. </property>
  • 修改start-dfs.sh和stop-dfs.sh配置

    1. > cd /home/soft/hadoop-3.2.2/sbin
    2. > vim start-dfs.sh
    3. > vim stop-dfs.sh

    在最上边添加如下内容,保存并退出:

    1. HDFS_DATANODE_USER=root
    2. HADOOP_SECURE_DN_USER=hdfs
    3. HDFS_NAMENODE_USER=root
    4. HDFS_SECONDARYNAMENODE_USER=root
  • 修改start-yarn.sh和stop-yarn.sh配置

    1. > vim start-yarn.sh
    2. > vim stop-yarn.sh

    在最上边添加如下内容,保存并退出:

    1. YARN_RESOURCEMANAGER_USER=root
    2. HADOOP_SECURE_DN_USER=yarn
    3. YARN_NODEMANAGER_USER=root

    2.3 启动验证

  1. 第一次启动需要先格式化集群,执行如下命令:

    1. ## 格式化 HDFS 集群的 namenode
    2. hdfs namenode -format
  2. 启动hadoop

    1. > cd /home/soft/hadoop-3.2.2/sbin
    2. > ./start-all.sh
  3. 访问hadoop集群的web地址:http://localhost:9870(Hadoop3中HDFS的默认端口改为9870,Hadoop2的默认端口为50070)

image.png

  1. 访问Yarn的web地址:http://localhost:8088/cluster

image.png
出现上述界面,说明安装成功啦!

2.4 问题解决

安装过程中遇到的一些问题。

2.4.1 SSH问题

在启动hadoop时,可能出现此问题:

localhost: ssh: connect to host localhost port 22: Connection refused
localhost: ssh: connect to host localhost port 22: Connection refused
  • 验证是否存在ssh服务

    1. ps -ef | grep ssh

    大概率不存在。。。

  • 安装ssh

下载地址:https://launchpad.net/ubuntu/+source/openssh/1:7.2p2-4/+build/9584683
image.png
下载client和server:openssh-client_7.2p2-4_amd64.debopenssh-sftp-server_7.2p2-4_amd64.deb

  1. # 上传到服务器,安装
  2. > dpkg -i openssh-client_7.2p2-4_amd64.deb
  3. > dpkg -i openssh-sftp-server_7.2p2-4_amd64.deb
  4. # 启动
  5. > /etc/init.d/ssh start
  6. # 测试是否成功
  7. > ssh localhost
  8. # 设置免密登录
  9. > cd ~
  10. > cd .ssh/
  11. > ssh -keygen -t rsa
  12. > cat ./id_rsa.pub >> ./authorized_keys
  13. > chmod 0600 ./authorized_keys
  1. 至此,此问题完美解决!

3. Hive安装

本地模式安装hive,需要依赖hadoop和mysql。hadoop安装步骤如上,mysql安装了windows版本,傻瓜操作,步骤略。

3.1 下载

国内下载镜像地址:https://mirrors.cnnic.cn/apache/
image.png
下载apache-hive-3.1.2-bin.tar.gz安装包。

3.2 安装

  1. # 上传解压安装包
  2. > cd /home/soft
  3. > tar -zxvf apache-hive-3.1.2-bin.tar.gz
  4. > mv apache-hive-3.1.2-bin hive-3.1.2
  5. # 解决hadoop、hive之间guava版本差异
  6. > cd /home/soft/hive-3.1.2
  7. > rm -f ./lib/guava-19.0.jar
  8. > cp /home/soft/hadoop-3.2.2/share/hadoop/common/lib/guava-27.0-jre.jar ./lib/
  9. # 添加mysql jdbc驱动到hive安装包lib/文件下
  10. mysql-connector-java-5.1.47.jar
  11. # 配置hive环境变量
  12. > vim /etc/profile
  13. # 添加如下内容
  14. export HIVE_HOME=/home/soft/hive-3.1.2
  15. export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
  16. # 修改hive环境变量 添加Hadoop_HOME
  17. > cd /home/soft/hive-3.1.2/conf/
  18. > vim hive-env.sh
  19. # 添加如下内容
  20. HADOOP_HOME=/home/soft/hadoop-3.2.2
  21. export HIVE_CONF_DIR=/home/soft/hive-3.1.2/conf
  22. export HIVE_AUX_JARS_PATH=/home/soft/hive-3.1.2/lib
  23. # 新增hive-site.xml 配置mysql等相关信息
  24. > vim hive-site.xml
  25. # 内容如下
  26. # 初始化metadata
  27. > cd /home/soft/hive-3.1.2
  28. > ./bin/schematool -dbType mysql -initSchema
  29. # 初始化成功会在mysql中创建74张表
  • hive客户端使用

    1. # 启动hive服务
    2. > cd /home/soft/hive-3.1.2
    3. > bin/hive

    启动成功:
    image.png

  • beeline客户端使用(推荐) ```shell

    启动hiveserver2服务

    cd /home/soft/hive-3.1.2 nohup ./bin/hiveserver2 & >/dev/null 2>&1

启动beeline

./bin/beeline -u jdbc:hive2://localhost:10000 -n root

10000为hiveserver默认端口

  1. 启动成功:<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/22837646/1649477237642-1f806a00-07dd-4ae2-9d62-fe39c318855a.png#clientId=uedd97f13-1ba1-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=566&id=ub7ff767d&margin=%5Bobject%20Object%5D&name=image.png&originHeight=849&originWidth=1793&originalType=binary&ratio=1&rotation=0&showTitle=false&size=163944&status=done&style=stroke&taskId=u0e995780-6f41-4b13-869d-97c015f1ea1&title=&width=1195.3333333333333)<br />**hive-site.xml内容**:
  2. ```xml
  3. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  4. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  5. <configuration>
  6. <!-- mysql地址 -->
  7. <property>
  8. <name>javax.jdo.option.ConnectionURL</name>
  9. <value>jdbc:mysql://xxx.xxx.xxx.xxx:3306/hive?createDatabaseIfNotExist=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
  10. </property>
  11. <!-- 驱动 -->
  12. <property>
  13. <name>javax.jdo.option.ConnectionDriverName</name>
  14. <value>com.mysql.jdbc.Driver</value>
  15. </property>
  16. <!-- 账号 -->
  17. <property>
  18. <name>javax.jdo.option.ConnectionUserName</name>
  19. <value>root</value>
  20. </property>
  21. <!-- 密码 -->
  22. <property>
  23. <name>javax.jdo.option.ConnectionPassword</name>
  24. <value>root</value>
  25. </property>
  26. <property>
  27. <name>datanucleus.readOnlyDatastore</name>
  28. <value>false</value>
  29. </property>
  30. <property>
  31. <name>datanucleus.fixedDatastore</name>
  32. <value>false</value>
  33. </property>
  34. <property>
  35. <name>datanucleus.autoCreateSchema</name>
  36. <value>true</value>
  37. </property>
  38. <property>
  39. <name>datanucleus.schema.autoCreateAll</name>
  40. <value>true</value>
  41. </property>
  42. <property>
  43. <name>datanucleus.autoCreateTables</name>
  44. <value>true</value>
  45. </property>
  46. <property>
  47. <name>datanucleus.autoCreateColumns</name>
  48. <value>true</value>
  49. </property>
  50. <property>
  51. <name>hive.metastore.local</name>
  52. <value>true</value>
  53. </property>
  54. <!-- 显示表的列名 -->
  55. <property>
  56. <name>hive.cli.print.header</name>
  57. <value>true</value>
  58. </property>
  59. <!-- 显示数据库名称 -->
  60. <property>
  61. <name>hive.cli.print.current.db</name>
  62. <value>true</value>
  63. </property>
  64. </configuration>

3.3 问题解决

3.3.1 Windows的3306端口不通

需要开放windows3306端口,步骤如下:

  1. 打开【高级安全Windows Defender防火墙】配置
  2. 新建入站规则

image.png

  1. 选择端口,点击下一步,选择TCP、特定本地端口:3306,点击下一步

image.png

  1. 选择允许连接,然后一直点击下一步到结束,至此3306端口就开放了。

image.png

3.3.2 metastore数据库初始化失败

初始化metastore时,报错连不上数据库。
排查发现:Windows可以ping通Linux的ip,但是反过来ping不通,应该是出于安全考虑吧,win11默认在防火墙里禁用了。解决步骤:

  1. 同上打开防火墙配置,并新建入站规则

image.png

  1. 选择自定义,点击下一页,协议和端口配置:协议类型ICMPv4

image.png

  1. 点击下一页到结束即可。

    3.3.3 beeline连接权限问题

    连接报错:User: root is not allowed to impersonate root。
    此问题需修改hadoop配置,修改core-site.xml文件,添加如下内容即可解决。
    1. <!-- 表示设置 hadoop 的代理用户-->
    2. <property>
    3. <!--表示代理用户的组所属-->
    4. <name>hadoop.proxyuser.root.groups</name>
    5. <value>*</value>
    6. </property>
    7. <property>
    8. <!--表示任意节点使用 hadoop 集群的代理用户 hadoop 都能访问 hdfs 集群-->
    9. <name>hadoop.proxyuser.root.hosts</name>
    10. <value>*</value>
    11. </property>

    3.3.4 insert into执行慢

    修改yarn-site.xml配置,添加如下内容: ```xml yarn.scheduler.minimum-allocation-mb 2048 default value is 1024

yarn.nodemanager.resource.memory-mb 4096 ```