Ubuntu搭建 Spark、Hive、Hadoop+yarn

操作系统:Ubuntu 16.04.12

虚拟机:VMware® Workstation 16 Pro 16.0.0

JDK:1.8.0_282

Hadoop: hadoop-2.7.5    Index of /dist/hadoop/common

Spark: spark-2.4.7-bin-hadoop2.7   Downloads | Apache Spark

Hive:apache-hive-2.3.8  https://mirrors.bfsu.edu.cn/apache/hive/

一、配置SSH

配置SSH实现免密登录,hadoop、spark等在master机器上安装好了之后直接通过scp分发给slave机器比较方便。

ssh-keygen -t rsa -P ''
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

执行上面第二行之后可以实现在本机上ssh登录不需要密码。对所有机器都执行这两条命令

我们需要用master机器登录slave机器或者免密传输文件,此时需要将master机器的公钥也就是id_rsa.pub文件先传到slave机器上,然后在执行上述第二条命令。然后使用 ssh 用户名@机器名 尝试是否可以免密登录。

二、集群准备

1.开启三台ubuntu机器,可以使用vm的克隆功能直接克隆两台一样的机器

2.修改三台机器的hosts和hostname文件:

修改hostname文件:

sudo nano /etc/hostname

 你把你要当作master机器的机器取名为master,剩下的机器分别起名为slave1、slave2...

dockercopose搭建完了hdfs现在要搭建hive_大数据

修改hosts文件:

 通过以下命令查询三台机器的ip地址,然后修改hosts

ifconfig
sudo nano /etc/hosts

格式如图第二行注释掉,下面加上  ip地址+空格+对应机器名

dockercopose搭建完了hdfs现在要搭建hive_分布式计算_02

三、安装Hadoop

按照上文给出的地址下载压缩包在master机器上解压,如果使用命令下载会放到 /usr/local/ 这个文件夹下面。

但是我当时安装的时候就放到了/home/jamjar目录下,jamjar为我的用户名,以下不再提示。

1.修改hadoop-env.sh 进入安装目录,/etc/hadoop

dockercopose搭建完了hdfs现在要搭建hive_hive_03

配置hadoop-env.sh :

将其中 

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true"   

修改为:

export HADOOP_OPTS="$HADOOP_OPTS -Djava.net.preferIPv4Stack=true -Djava.security.krb5.realm= -Djava.secur$
export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" 

配置yarn-env.sh

export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64" 

配置slave

在slave文件中加入你的slave机器的ip或者机器名即可如slave1 slave2 换行分隔

配置core-site.xml

配置如下:

<configuration>
   <property>
      <name>hadoop.tmp.dir</name>
 <value>/home/jamjar/hadoop-2.7.5/etc/hadoop/hdfs/directory</value>
     <description>A base for other temporary directories.</description>
   </property>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://master:8020</value>
   </property>
 </configuration>

其中hadoop.tmp.dir的hadoop路径部分要写自己的路径名

配置hdfs-site.xml

<configuration>
    <property>
       <name>dfs.namenode.secondary.http-address</name>
       <value>master:9001</value>
      </property>
     <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:/home/jamjar/hadoop-2.7.5/etc/hadoop/hdfs/yarn_model/name</value>
      </property>
     <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:/home/jamjar/hadoop-2.7.5/etc/hadoop/hdfs/yarn_model/data</value>
      </property>
      
    <property>
      <name>dfs.replication</name>
      <value>1</value>
     </property></configuration>

配置mapred-site.xml

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


 

配置yarn-site.xml

<configuration>
     <property>
     <name>yarn.nodemanager.pmem-check-enabled</name>
     <value>false</value>
     </property>    <property>
         <name>yarn.nodemanager.vmem-check-enabled</name>
         <value>false</value>
     </property>    <property>
         <name>yarn.nodemanager.aux-services</name>
         <value>mapreduce_shuffle</value>
     </property>
     <property>
         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
     </property>
     <property>
         <name>yarn.resourcemanager.address</name>
         <value>master:8032</value>
     </property>
     <property>
         <name>yarn.resourcemanager.scheduler.address</name>
         <value>master:8030</value>
     </property>
     <property>
         <name>yarn.resourcemanager.resource-tracker.address</name>
         <value>master:8035</value>
     </property>
     <property>
         <name>yarn.resourcemanager.admin.address</name>
         <value>master:8033</value>
     </property>
     <property>
         <name>yarn.resourcemanager.webapp.address</name>
         <value>master:8088</value>
     </property>
 </configuration>

2.添加环境变量

cd
nano .bashrc
export HADOOP_HOME=/home/jamjar/hadoop-2.7.5/
 export PATH=$PATH:$HADOOP_HOME/bin注意修改HADOOP_HOME为你的地址
3.将配置好的hadoop文件夹分发到slave机器上
4.开启hadoop服务
进入/home/jamjar/spark-2.4.7-bin-hadoop2.7/sbin
./start_dfs.sh(./stop_dfs.sh为关闭)
./start_yarn.sh

dockercopose搭建完了hdfs现在要搭建hive_hive_04

注意下面Capacity要一直保持有容量,如果开启失败的话会出现0

以上yarn模式的hadoop已经开启了。

三、安装Spark

安装spark的方式和安装hadoop类似,我放的文件夹位置也和hadoop在同一层。

1.配置conf文件夹中的spark-env.sh 如下

export SCALA_HOME=/home/jamjar/scala-2.11.12
 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
 export HADOOP_HOME=/home/jamjar/hadoop-2.7.5/
 export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
 SPARK_MASTER_HOST=master
 SPARK_MASTER_PORT=7077
 SPARK_LOCAL_DIRS=/home/jamjar/spark-2.4.7-bin-hadoop2.7/examples/jars
 export SPARK_HISTROY_OPTS="-Dspark.history.ui.port=18080 -Dspark.history.fs.logDirectory=hdfs://master:8020/directory -Dspark.history.retainedApplication=30"
 SPARK_DRIVER_MEMORY=1G

其中export SPARK_HISTROY_OPTS是配置history服务的。

2.配置slave文件,和hadoop一样

3.配置spark-defaults.conf

spark.eventLog.enabled true
spark.eventLog.dir hdfs://master:8020/directory

使用历史服务需要在hdfs上建/directory文件夹

执行命令:

hadoop fs mkdir -p /directory

4.启动spark和历史服务

进入sb文件夹 ./start-all ,./start-history-server.sh

如果启动了yarn模式可以浏览器输入地址:master:8088查看,如果没有用yarn模式进入master:8080

分别得到如下页面,使用yarn

dockercopose搭建完了hdfs现在要搭建hive_分布式计算_05

未使用yarn:

dockercopose搭建完了hdfs现在要搭建hive_hive_06

进入master:18080可以查看历史记录并且下载log

提供两个submit脚本:

使用yarn模式: 

./spark-submit --class org.apache.spark.examples.SparkPi \
 --master yarn \
 --deploy-mode client \
 ../examples/jars/spark-examples_2.11-2.4.7.jar \
 10
其中deploy-mode 可以为cluster和client,client提供个人调试使用,cluster为一般业务场景应用,但是注意cluster上是看不到你程序的打印输出的!
不用yarn模式:
./spark-submit --class org.apache.spark.examples.SparkPi \
 --master spark://master:7077 \
 ../examples/jars/spark-examples_2.11-2.4.7.jar 10

三、安装HIVE

注意安装HIVE库版本,一般HIVE版本的开头数字和Hadoop版本一致,安装Yarn 2.x版本可以参考这篇CSDN写的很好

1.下载hive压缩包,解压缩

2.配置环境变量(最下面两行)

export HADOOP_HOME=/home/jamjar/hadoop-2.7.5/
 export PATH=$PATH:$HADOOP_HOME/binexport SPARK_HOME=/home/jamjar/spark-2.4.7-bin-hadoop2.7/
 export PATH=$PATH:$SPARK_HOME/bin export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
 export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/nativeexport HIVE_HOME=/usr/local/hive
 export PATH=$PATH:$HIVE_HOME/bin

3.修改hadoop 文件夹里的core-site.xml,添加如下

<!-- hive. -->
 <property>
  <name>hadoop.proxyuser.root.hosts</name>
     <value>*</value>
 </property>
 <property>
     <name>hadoop.proxyuser.root.groups</name>
     <value>*</value>
 </property>

4.安装Mysql:参考厦门大学大数据实验室文章:

Ubuntu安装MySQL及常用操作_厦大数据库实验室博客

5.下载驱动 mysql-connector-java-5.xx,解压后将jar包拷贝到HIVE目录下的lib文件夹中

MySQL :: Download Connector/J

mv mysql-connector-java-5.1.48.jar $HIVE_HOME/lib

6.mysql建立提供hive使用的database并赋权限

进入mysql后输入:
create database metastore;
 grant all on metastore.* to hive@'%'  identified by 'hive';
 grant all on metastore.* to hive@'localhost'  identified by 'hive';
 flush privileges;7.配置hive-site.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
 <configuration>
 <property>
     <name>hive.exec.scratchdir</name>
     <value>/usr/local/hive/tmp</value>
 </property>
 <property>
     <name>hive.metastore.warehouse.dir</name>
     <value>/usr/local/hive/warehouse</value>
 </property>
 <property>
     <name>hive.querylog.location</name>
     <value>/usr/local/hive/log</value>
 </property>
  
 <!-- 配置 MySQL 数据库连接信息 -->
 <property>
     <name>javax.jdo.option.ConnectionURL</name>
     <value>jdbc:mysql://localhost:3306/metastore?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</value>
   </property>
   <property>
     <name>javax.jdo.option.ConnectionDriverName</name>
     <value>com.mysql.jdbc.Driver</value>
   </property>
   <property>
     <name>javax.jdo.option.ConnectionUserName</name>
     <value>hive</value>
   </property>
   <property>
     <name>javax.jdo.option.ConnectionPassword</name>
     <value>hive</value>
   </property>
 </configuration>

8.配置hive_env.sh文件

加入JAVA_HOME和HADOOP_HOME方法和上文类似不赘述

如果在系统环境变量中配置了也可以进行此步

9.初始化hive

./schematool -dbType mysql -initSchema hive hive

10.命令行输入hive 执行 show databases; 如果成功hive就搭建成功了!

dockercopose搭建完了hdfs现在要搭建hive_分布式计算_07

到此搭建就算完成了,在搭建过程中踩了很多坑,以下几篇文章对我的搭建有很大帮助,十分感谢!