hadoop、spark、zookeeper、hbase、hive集群安装

一、docker搭建

1.本项目搭建在ubuntu系统上,需要ubuntu镜像,一共是三个节点,一个master,两个slave,共需要三个容器,下面是镜像的获取与容器的创建:
获取ubuntu镜像:

docker pull ubuntu

查看已有的镜像

docker images

创建桥接网络,连接宿主机,master和两个slave

docker network create -d bridge spark-net
docker network ls

创建master节点

docker run -itd --name master  --network spark-net -h master -p 8888:8888 -p 50070:50070 -p 4040:4040 -p 7077:7077 ubuntu

2.将master提交作为基础镜像
避免重复安装,所以将配置好基础工具的master作为基础镜像

docker commit master base

3.在镜像基础上创建slave1和slave2

docker run -itd --name slave1  --network spark-net -h slave1  base
docker run -itd --name slave2  --network spark-net -h slave2  base

4.创建hadoop账户

adduser hadoop

把hadoop用户加入到hadoop用户组

usermod -a -G hadoop hadoop

查看结果

cat /etc/group |grep hadoop

把hadoop用户赋予root权限

vim /etc/sudoers

添加下面这段

hadoop ALL=(root) NOPASSWD:ALL

二.安装和配置JAVA环境

下载并解压JDK
新建/usr/java目录

tar -zxvf jdk-8u161-linux-x64.tar.gz -C /usr/java/

配置环境变量

vim ~/.bashrc

在最后加上下列内容(一定注意环境变量后面不要加空格,否则容易出问题,jdk版本号看自己的版本,如果用网盘里的就不用更改)

export JAVA_HOME=/usr/java/jdk1.8.0_161
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH

使环境变量生效

source ~/.bashrc

查看java是否安装成功

java -version

三.SSH免密登录

安装并配置SSH
这里首先安装ssh

apt-get install openssh-server

启动ssh

service ssh start

配置ssh

vim /etc/ssh/sshd_config

避免后期在登录root账户的被拒绝,在PermitRootLogin prohibit-password下面添加PermitRootLogin yes
将PasswordAuthentication设为yes
配置免密登录
首先在master上创建ssh-key

ssh-keygen -t rsa -P ""

一直回车
然后在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub

在slave1和slave2上以同样的方式生成
然后分别用(这里的目录无所谓,传到哪里都行,就是将从节点的id_rsa传到主节点上)

scp id_rsa.pub hadoop@master:/tmp/slave1_id_rsa.pub
scp id_rsa.pub hadoop@master:/tmp/slave2_id_rsa.pub

然后将slave1和slave2传过来的id_rsa文件移动到~/.ssh/目录下

mv /tmp/slave1_id_rsa.pub ~/.ssh/slave1_id_rsa.pub
mv /tmp/slave2_id_rsa.pub ~/.ssh/slave2_id_rsa.pub

将id_rsa.pub、slave1_id_rsa.pub、slave2_id_rsa.pub追加到authorized_keys授权文件中

cat *.pub >>authorized_keys

这个时候已经可以免密登录本机了

ssh master

将master上的公钥文件传给slave1和slave2

scp authorized_keys hadoop@slave1:/tmp
scp authorized_keys hadoop@slave2:/tmp

然后将公钥移动到~/.ssh/目录下

cp /tmp/authorized_keys ~/.ssh/authorized_keys

修改公钥文件的权限

chmod 664 authorized_keys

然后测试三个虚拟机是否可以免密登录
master连接slave1和slave2

四.安装Hdoop

master的配置
解压到/usr/local
然后切换到/usr/local将hadoop-2.7.4重命名为hadoop,并给/usr/local/hadoop设置访问权限

cd /usr/local
sudo mv hadoop-2.7.4 hadoop 
sudo chmod 777 -R /usr/local/Hadoop

配置.bashsc文件

vim ~/.bashrc

在文件末尾追加

export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
export PATH=$PATH:$HADOOP_INSTALL/sbin
export HADOOP_MAPRED_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_HOME=$HADOOP_INSTALL 
export HADOOP_HDFS_HOME=$HADOOP_INSTALL 
export YARN_HOME=$HADOOP_INSTALL 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib"

执行该命令使环境变量生效

source ~/.bashrc
vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh

在末尾添加下面内容

export JAVA_HOME=/usr/java/jdk1.8.0_161
export HADOOP=/usr/local/hadoop
export PATH=$PATH:/usr/local/hadoop/bin
vim /usr/local/hadoop/etc/hadoop/yarn-env.sh

在末尾添加

JAVA_HOME=/usr/java/jdk1.8.0_161

进入Hadoop的安装目录,下面操作的路径均是在此目录的基础上的相对路径

cd /usr/local/hadoop

配置core-site.xml

vim etc/hadoop/core-site.xml

将configuration替换为下面内容

 <configuration>
                            <property>
                                    <name>hadoop.tmp.dir</name>
                                    <value>file:/usr/local/hadoop/tmp</value>
                                    <description>Abase for other temporary directories.</description>
                            </property>
                            <property>
                                    <name>fs.defaultFS</name>
                                    <value>hdfs://master:9000</value>
                            </property>
</configuration>

配置hdfs-site.xml

vim etc/hadoop/hdfs-site.xml
<configuration>

                            <property>
                                    <name>dfs.replication</name>
                                    <value>2</value>
                            </property>
                            <property>
                                    <name>dfs.namenode.name.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/name</value>
                            </property>
                            <property>
                                    <name>dfs.datanode.data.dir</name>
                                    <value>file:/usr/local/hadoop/tmp/dfs/data</value>
                            </property>
</configuration>

配置yarn-site.xml

vim  etc/hadoop/yarn-site.xml
<configuration>

<!-- Site specific YARN configuration properties -->

                    <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:8031</value>| 
                     </property>
                     <property>
                            <name>yarn.resourcemanager.admin.address</name>
                            <value>master:18141</value>
                     </property>
                     <property>
                            <name>yarn.resourcemanager.webapp.address</name>
                            <value>master:18088</value>
                     </property>
</configuration>

配置slave

vim etc/hadoop/slaves

加上两个从节点的主机名即可

slave1
slave2

这个时候master的hadoop已经完全配置好了
接下来将master的hadoop传到slave1和slave2

配置slave1和slave2

scp -r /usr/local/hadoop hadoop@slave1:/usr/local
scp -r /usr/local/hadoop hadoop@slave2:/usr/local

启动Hadoop
在master节点上执行(只在master上执行)

hdfs namenode -format

运行启动脚本

start-all.sh

测试hadoop集群是否正常运行

hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar pi 10 10

五、spark-hadoop的搭建

1.解压scala和spark

tar -zxvf scala-2.11.8.tgz
tar -zxvf spark-2.4.7-bin-hadoop2.7.tgz

2.配置环境变量(master、slave1、slave2分别执行)

export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export PATH=$PATH:$SCALA_HOME/bin:$SPARK_HOME/bin:$SPARK_HOME/sbin
source ~/.bashrc

3.配置spark(只在master上配置)
进入conf目录下

cd /usr/local/spark-2.4.7-bin-hadoop2.7/conf/

将spark-env.sh.template、slaves.template分别替换为spark-env.sh、slaves

mv spark-env.sh.template spark-env.sh
mv slaves.template slaves

配置slaves
原来红框处为localhost,改为slave1和slave2
配置spark-env.sh

SPARK_MASTER_WEBUI_PORT=8888

export SPARK_HOME=/usr/local/spark-2.4.7-bin-hadoop2.7
export HADOOP_HOME=/usr/local/hadoop
export MASTER=spark://master:7077
export SCALA_HOME=/usr/local/scala-2.11.8
export SPARK_MASTER_HOST=master

export JAVA_HOME=/usr/java/jdk1.8.0_161

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export SPARK_WORKER_MERMORY=4G

此时master已经配置好了
4.配置两个slave
只需要将master上配置好的spark传到slave中即可

scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave1:/usr/local/
scp -rp /usr/local/spark-2.4.7-bin-hadoop2.7/ root@slave2:/usr/local/

5.启动spark
进入目录/usr/local/spark-2.4.7-bin-hadoop2.7/sbin
输入spark的启动命令

./start-all.sh

六、安装HBase

  1. 解压
    将下载好的HBase文件上传到Hadoop集群中的master节点
tar -zxvf hbase-1.3.1-bin.tar.gz  -C /home/hadoop/
  1. 修改HBase的配置文件
    (1)修改hbase-env.sh文件
    新增四项配置
export HBASE_CLASSPATH=/home/hadoop/hadoop-2.6.5/etc/hadoop
export HBASE_PID_DIR=/home/hadoop/hbase-1.3.1/pids
export JAVA_HOME=/usr/local/java/jdk1.8.0_161
export HBASE_MANAGES_ZK=false

一个分布式运行的HBase依赖一个Zookeeper集群,所有的节点和客户端都必须能够访问Zookeeper。默认的情况下HBase会管理一个Zookeep集群,即HBase默认自带一个Zookeep集群,这个集群会随着HBase的启动而启动。而在实际的商业项目中通常自己管理一个Zookeeper集群更便于优化配置提高集群工作效率,但需要配置HBase。需要修改conf/hbase-env.sh里面的HBASE_MANAGES_ZK来切换,这个值默认是true,作用是让HBase启动的时候同时也启动Zookeeper。在安装过程中,采用独立运行Zookeeper集群的方式,故将其属性值改为false。

(2)修改regionservers文件
regionservers文件负责配置HBase集群中哪台节点做RegionServer服务器,本书的规划是所有slave节点均可当RegionServer服务器,故其配置内容为:

slave1
slave2

(3)修改hbase-site.xml文件
hbase-site.xml文件内容修改为:

<property>
	<name>hbase.rootdir</name>
	<value>hdfs://master:9000/hbase</value>
</property>
<property> 
	<name>hbase.master</name> 
	<value>hdfs://master:60000</value> 
</property> 
<property>
	<name>hbase.zookeeper.property.dataDir</name>
	<value>/home/hadoop/zookeeper-3.4.5/data</value>
</property>
<property>
	<name>hbase.cluster.distributed</name>
	<value>true</value>
</property>
<property>
	<name>hbase.zookeeper.quorum</name>
	<value>master,slave1,slave2</value>
</property>
<property>
	<name>hbase.zookeeper.property.clientPort</name>
	<value>2181</value>
</property>
<property>
	<name>hbase.master.info.port</name>
        <value>60010</value>
</property>

注意:hbase.zookeeper.quorum用来设置HBase集群中哪些节点安装了ZooKeeper,只能设置为主机名而不是IP地址。HBase1.0 以后的版本,需要手动配置Web访问端口号60010。

(4)分发到slave1和slave2节点

scp -r /home/hadoop/hbase-1.3.1/ slave1:/home/hadoop/
scp -r /home/hadoop/hbase-1.3.1/ slave2:/home/hadoop/
  1. 修改三个节点的环境变量
    在/etc/profile文件末尾添加
export PATH=$PATH:/home/hadoop/hbase-1.3.1/bin

并执行命令"source /etc/profile"使配置的环境变量生效。
4. 测试
在master节点运行start-hbase.sh,将HBase集群启动,可以通过jps或查看运行状况。master节点存在HMaster进程,
slave1和slave2存在HRegionServer进程
通过浏览器访问地址http://master:60010/master-status,可以看到整个HBase集群的状态.
在master节点,使用命令"hbase-daemon.sh stop master",等待一会发现slave1成为master,当HBase的master节点故障后,ZooKeeper会从备份中自动推选一个作为master.

七、安装zookeeper

第一步:下载zookeeeper的压缩包,
下载完成之后,上传到我们的linux的/export/software路径下准备进行安装
第二步:解压
在master主机上,解压zookeeper的压缩包到/usr/local路径下去,然后准备进行安装

cd /export/software
tar -zxvf zookeeper-3.4.6.tar.gz -C  /usr/local

第三步:修改配置文件
在node1主机上,修改配置文件

cd /usr/local/zookeeper-3.4.6/conf/
cp zoo_sample.cfg zoo.cfg
mkdir -p /export/server/zookeeper-3.4.6/zkdatas/
vim  zoo.cfg

修改以下内容

#Zookeeper的数据存放目录
dataDir=/export/server/zookeeper-3.4.6/zkdatas
# 保留多少个快照
autopurge.snapRetainCount=3

# 日志多少小时清理一次
autopurge.purgeInterval=1

# 集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

第四步:添加myid配置
在node1主机的/export/server/zookeeper-3.4.6/zkdatas/这个路径下创建一个文件,文件名为myid ,文件内容为1

echo 1 > /export/server/zookeeper-3.4.6/zkdatas/myid 

第五步:安装包分发并修改myid的值
在node1主机上,将安装包分发到其他机器
第一台机器上面执行以下两个命令

scp -r  /export/server/zookeeper-3.4.6/ node2:/export/server/
scp -r  /export/server/zookeeper-3.4.6/ node3:/export/server/

第二台机器上修改myid的值为2

echo 2 > /export/server/zookeeper-3.4.6/zkdatas/myid

第三台机器上修改myid的值为3

echo 3 > /export/server/zookeeper-3.4.6/zkdatas/myid

第六步:添加环境变量

vim /etc/profile  #添加以下内容,三台都要进行

export ZOOKEEPER_HOME=/export/server/zookeeper-3.4.6
export PATH=:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile

第七步:三台机器启动zookeeper服务
三台机器分别启动zookeeper服务
这个命令三台机器都要执行

/export/server/zookeeper-3.4.6/bin/zkServer.sh start

三台主机分别查看启动状态

/export/server/zookeeper-3.4.6/bin/zkServer.sh  status

八、安装hive

安装在hadoop的namenode上(也就是主节点上:node4上),上传安装文件到(可以根据自己的环境,目录可以自定义)/opt/software/apache-hive-2.1.0-bin.tar.gz
解压:

tar –zxvf apache-hive-2.1.0-bin.tar.gz

添加到环境变量

vi /etc/profile

编辑
#hive

export HIVE_HOME=/opt/module/hive/apache-hive-2.1.0-bin
export PATH=$PATH:$HIVE_HOME/bin

保存后使其生效:

source /etc/profile

安装MySQL

 apt-get install mysql-server
  1. 进入hive的conf目录下面复制一下hive-default.xml.template名子命名为:hive-site.xml
cp hive-default.xml.template hive-site.xml
vim hive-site.xml
(1)、<property>
         <name>javax.jdo.option.ConnectionURL</name>
         <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
         <description>JDBC connect string for a JDBC metastore</description>
      </property>
 
(2)、<property>
         <name>javax.jdo.option.ConnectionDriverName</name>
         <value>com.mysql.jdbc.Driver</value>
         <description>Driver class name for a JDBC metastore</description>
     </property>
 
(3)、<property>
         <name>javax.jdo.option.ConnectionUserName</name>
         <value>root</value>
         <description>Username to use against metastore database</description>
      </property>
 
(4)、 <property>
         <name>javax.jdo.option.ConnectionPassword</name>
         <value>123qwe</value>
         <description>password to use against metastore database</description>
       </property>
 
(5)、<property>
         <name>hive.exec.local.scratchdir</name>
         <value>/opt/module/hive/apache-hive-2.1.0-bin /tmp</value>
         <description>Local scratch space for Hive jobs</description>
      </property>
 
 (6)、<property>
          <name>hive.downloaded.resources.dir</name>
          <value>/opt/module/hive/apache-hive-2.1.0-bin /tmp/resources</value>
          <description>Temporary local directory for added resources in the remote file system.</description>
       </property>
 
 (7)、<property>
          <name>hive.querylog.location</name>
          <value>/opt/module/hive/apache-hive-2.1.0-bin /tmp</value>
          <description>Location of Hive run time structured log file</description>
       </property>
 
(8)、<property>
         <name>hive.server2.logging.operation.log.location</name>
         <value>/opt/module/hive/apache-hive-2.1.0-bin/tmp/operation_logs</value>
         <description>Top level directory where operation logs are stored if logging functionality is enabled</description>
      </property>
  1. 复制hive文件到node5、node6节点:
scp –r /opt/module/hive/ node5:/opt/module/
scp –r /opt/module/hive/ node6:/opt/module/
  1. 在node4上使用schematool 初始化metastore的schema:
schematool -initSchema -dbType mysql
  1. 运行hive
[root@node4 mysql]# hive

mysql/hive字符集问题:hive中文乱码

alter database hive character set latin1;
set character_set_client=latin1;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值