相信小伙伴都有这个疑问,机器资源不够,也没有钱配置好的学习的机器,那么问题来了,这时候我们该怎么办呢?2020-02-25 19:00更新

我一个朋友最近也在学习 Hadoop, 学到了 Hive 了,想实际操作一下,但是没有机器,正逢某大厂的云服务器打折,就买了一台 2 核 8 G 的云主机。我打算实际给她在这台云主机上搭建一个学习环境。那么,下面开始吧:

本文档描述了如何设置和配置单个节点 Hadoop 安装,以便您可以使用 Hadoop MapReduce 和 Hadoop分布式文件系统(HDFS)快速执行简单操作。

一、环境准备

  • Linux 系统(一台云主机或一台物理机)
  • JDK 8
  • SSH

二、安装 Hadoop 3.2.0

2.1 下载

需要下载一个软件包,镜像地址: Apache Download Mirrors (清华大学的镜像),选一个版本即可,我选的是 Hadoop-3.2.0

image.png

2.2 解压

解压安装包,进入安装包。

  1. ├── bin -- 存放命令脚本
  2. ├── etc -- 配置文件
  3. ├── include -- 头文件
  4. ├── lib -- 类库
  5. ├── libexec -- 类库
  6. ├── LICENSE.txt
  7. ├── logs -- 存放日志
  8. ├── NOTICE.txt
  9. ├── README.txt
  10. ├── sbin -- 启动脚本
  11. └── share -- 共享

2.3 配置 Hadoop 环境变量

编辑文件:vim ~/.bash_profile ,加入 HADOOP_HOME 信息。

  1. JAVA_HOME=/usr/local/java/jdk1.8.0_201
  2. HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.0
  3. PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
  4. export PATH

2.4 配置 hadoop-env.sh

执行 cd $HADOOP_HOME/etc/hadoop/hadoop-env.sh 添加如下信息: root 换成你的 linux 账户名即可,我这里是 root 用户。

  1. # 配置 JAVA_HOME
  2. export JAVA_HOME=/usr/local/jdk1.8.0_201
  3. # 配置用户名
  4. export HDFS_NAMENODE_USER="root"
  5. export HDFS_DATANODE_USER="root"
  6. export HDFS_SECONDARYNAMENODE_USER="root"
  7. export YARN_RESOURCEMANAGER_USER="root"
  8. export YARN_NODEMANAGER_USER="root"

2.5 配置 core-site.xml

我们看一下启模式,有三种

默认情况下,Hadoop被配置为在非分布式模式(也就是Local 模式)下运行,作为单个Java进程。这对调试很有用。

显然,不是我想要的。在有限机器的情况下 ,所以选择了伪分布式

执行 vim $HADOOP_HOME/etc/hadoop/core-site.xml 加入下面内容:

这里需要注意下 hadoop.tmp.dir 的属性值,默认是 /temp/hadoop-{$name} 的,但是还是建议修改成一个磁盘足够的路径。很多数据要存在这个路径下面,比如 FsImage,edits log 等。我之前就没有注意这个属性,结果导致集群后面 Namenode 报错,进入了不可以状态(safe mode),原因是默认路径没有足够的空间存在 fsimage 了。

  1. <configuration>
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://localhost:9000</value>
  5. </property>
  6. <!--配置临时目录,很重要。很多配置都引用了这个变量-->
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>/opt/hadoop_temp</value>
  10. </property>
  11. </configuration>

2.6 配置 hdfs-site.xml

执行 vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml

机器存储资源有限,所以这里设置 HDFS 的数据块只有 1 个副本。

  1. <configuration>
  2. <property>
  3. <name>dfs.replication</name>
  4. <value>1</value>
  5. </property>
  6. </configuration>

2.7 配置 mapred-site.xml

这里,我选择使用 yarn 作为资源调度。(大多数公司的选择)

执行 vim $HADOOP_HOME/etc/hadoop/mapred-site.xml ,添加如下属性:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. <property>
  7. <name>mapreduce.application.classpath</name>
  8. <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
  9. </property>
  10. </configuration>

2.8 配置 yarn-site.xml

执行 vim $HADOOP_HOME/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.nodemanager.env-whitelist</name>
  8. <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
  9. </property>
  10. </configuration>

2.9 配置 SSH 免密

执行下面的命令生成秘钥对,并且把公钥加到认证文件中,最后修改权限。

如果遇到错误,请看文件结尾

  1. ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
  2. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
  3. chmod 0600 ~/.ssh/authorized_keys

2.10 格式化 HDFS 文件系统

注意:只有第一次安装时才需要执行这个。这里我们初次安装,所以需要格式化系统。

  1. hdfs namenode -format

2.11 使用 Hadoop

启动,Hadoop 伪集群: start-all.sh , 关闭 stop-all.sh

如何查看服务启动成功了呢?

  • 查看日志文件是否有错误
  • JPS 查看进程是否存在
  • 界面查看是都可以访问

日志文件在 $HADOOP_HOME/logs 下面

jsp 命令可以查看 Java 进程,如图,有如下五个进程,则证明上述操作没有问题。
image.png

访问 web 服务
http://ip:8088 — 这是 yarn 管理界面

image.png
http://ip:9870 — 这是 HDFS 管理界面(hadoop 3.x 正常启动后50070访问不了,hadoop3.x把50070的默认端口修改为9870)

image.png

三、安装 mysql

如何安装 mysql 请看:安装 Mysql 教程

四、安装 Hive

4.1 下载

下载 https://mirrors.tuna.tsinghua.edu.cn/apache/hive/,因为我选的 Hadoop 是 3.x 版本的,所以这里安装的 Hive 选的 hive-3.1.2(为什么选择这个版本:http://hive.apache.org/downloads.html)

image.png

4.2 解压

解压的命令是 tar -zxvf xxx.tar.gz

  1. ├── bin -- 执行命令
  2. ├── binary-package-licenses
  3. ├── conf -- 配置文件
  4. ├── examples
  5. ├── hcatalog
  6. ├── jdbc
  7. ├── lib -- 类库,这里一会放置 mysql 的驱动
  8. ├── LICENSE
  9. ├── NOTICE
  10. ├── RELEASE_NOTES.txt
  11. └── scripts

4.3 配置 Hive 环境变量。

编辑文件:vim ~/.bashprofile ,加入 HIVE_HOME 信息。配置文件如下(欢迎新成员O(∩∩)O哈哈~)

  1. JAVA_HOME=/usr/local/java/jdk1.8.0_201
  2. HADOOP_HOME=/usr/local/hadoop/hadoop-3.2.0
  3. HIVE_HOME=/usr/local/hive/apache-hive-3.1.2-bin/
  4. PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HIVE_HOME/bin
  5. export PATHexport PATH

4.4 编辑 hive-site.xml

配置默认的文件,并重命名为 hive-site.xml

  1. cp $HIVE_HOME/conf/hive-default.xml.template $HIVE_HOME/conf/hive-site.xml

添加如下信息:主要是配置了 MySQL 的信息、Hiveserver2 的信息

  1. <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <!-- WARNING!!! This file is auto generated for documentation purposes ONLY! -->
  5. <!-- WARNING!!! Any changes you make to this file will be ignored by Hive. -->
  6. <!-- WARNING!!! You must make your changes in hive-site.xml instead. -->
  7. <!-- Hive Execution Parameters -->
  8. <!-- mysql管理元数据-->
  9. <property>
  10. <name>hive.metastore.db.type</name>
  11. <value>mysql</value>
  12. <description>
  13. Expects one of [derby, oracle, mysql, mssql, postgres].
  14. Type of database used by the metastore. Information schema &amp; JDBCStorageHandler depend on it.
  15. </description>
  16. </property>
  17. <property>
  18. <name>hive.metastore.warehouse.dir</name>
  19. <value>/user/hive/warehouse</value>
  20. <description>location of default database for the warehouse</description>
  21. </property>
  22. <property>
  23. <name>javax.jdo.option.ConnectionURL</name>
  24. <value>jdbc:mysql://jd:3306/hive?createDatabaseIfNotExist=true</value>
  25. </property>
  26. <property>
  27. <name>javax.jdo.option.ConnectionDriverName</name>
  28. <value>com.mysql.jdbc.Driver</value>
  29. </property>
  30. <property>
  31. <name>javax.jdo.option.ConnectionUserName</name>
  32. <value>root</value>
  33. </property>
  34. <property>
  35. <name>javax.jdo.option.ConnectionPassword</name>
  36. <!--自己mysql的密码哦-->
  37. <value>123456</value>
  38. </property>
  39. <!-- 配置 hiveserver2 -->
  40. <property>
  41. <name>hive.server2.thrift.port</name>
  42. <value>10000</value>
  43. </property>
  44. <property>
  45. <name>hive.server2.thrift.bind.host</name>
  46. <value>localhost</value>
  47. </property>
  48. <property>
  49. <name>hive.server2.enable.doAs</name>
  50. <value>false</value>
  51. </property>
  52. </configuration>

4.5 创建 /user/hive/warehouse 目录。

hive 创建的数据表默认是放在 /user/hive/warehouse 下面的,所以我们需要在 HDFS 上创建该目录:

  1. hadoop fs -mkdir -p /user/hive/warehouse

4.6 mysql-connector,

下载 mysql-connector, 地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java/5.1.47

下完成之后,放在 $HIVE_HOME/lib 目录下。

4.7 初始化数据库

这一步如果报错无,可能是jar包冲入了。可以参考文末链接解决

Exception in thread “main” java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V


  1. schematool -initSchema -dbType mysql

4.8 验证

元数据数据库是否建立。登录 mysql 可以查看(如图,这样就表示 hive 的元数据库建立好了。)

image.png

4.9 启动元数据服务

hive —service metastore &

5.0 启动 HiveServer2

HiveServer2支持多客户端的并发和认证,为开放API客户端如JDBC、ODBC提供了更好的支持。


hive —service hiveserver2 &

五、安装 zeppelin

5.1 下载

地址:http://zeppelin.apache.org/download.html

image.png

5.2 解压

5.3 安装 jdbc 解释器

  1. install-interpreter.sh --name jdbc

等待安装成功之后,执行下一步。

5.4 配置文件

进入 conf 目录,开始修改配置文件:
1.配置端口以及ip地址 cp zeppelin-site.xml.template zeppelin-site.xml

  1. # 修改下面这个属性,把127.0.0.1 改成主机的 hostname
  2. <property>
  3. <name>zeppelin.server.addr</name>
  4. <value>127.0.0.1</value>
  5. <description>Server binding address</description>
  6. </property>

2.配置 JAVA_HOME等其他环境变量。

  1. cp zeppelin-env.sh.template zeppelin-env.sh

3.配置用户验证

  1. cp shiro.ini.template shiro.ini


接着,编辑文件,修改成下面这样(仅供参考):

image.png

5.5 启动 zeppelin

  1. zeppelin-daemon.sh start

5.6 访问 web 界面

访问 localhost:8080,可以看到这个界面,就表示启动成功了。

image.png

账号和密码是在 5.4 中配置的。

5.7 配置解释器

账户名下面,点击菜单项【interpreter】

image.png

点击 Create ,填写下面标红的信息:

image.png

Properties

default.driver org.apache.hive.jdbc.HiveDriver
default.url jdbc:hive2://localhost:10000
default.user hive_user
default.password hive_password
default.proxy.user.property Example value: hive.server2.proxy.user

Dependencies
**

org.apache.hive:hive-jdbc:0.14.0
org.apache.hadoop:hadoop-common:2.6.0

使用 zeppelin

至此,我们可以使用 notebook 来编写 sql 查询 hive 中的数据了。

六、参考 && 采坑

关注我

扫码_搜索联合传播样式-白色版.png