分布式hadoop 部署

Posted 醉卧千山下,诗酒趁年华。

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式hadoop 部署相关的知识,希望对你有一定的参考价值。

1.安装并配置Hadoop

mkdir -p /usr/hadoop  &&  cd /usr/package277/

tar -zxvf hadoop-2.7.7.tar.gz -C /usr/hadoop/

xsync.sh /usr/hadoop/

将Hadoop安装目录配置到环境变量中,方便后续使用:

vim /etc/profile
# hadoop
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7/
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

xsync.sh /etc/profile
source /etc/profile


安装成功后我们进行Hadoop的基本配置分别编辑core-site.xml以及hdfs-site.xmlyarn-site.xml的配置文件:

cd $HADOOP_HOME/etc/hadoop
1.hadoop-env.sh运行环境 ======================
vim hadoop-env.sh
echo $JAVA_HOME
echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> hadoop-env.sh



2.core-site.xml全局参数============================
vim core-site.xml  # 增加如下内容

#namenode 主机为master 端口9000
#临时目录位置为绝对路径 /root/hadoopData/tmp
<configuration>
    <property>
      <name>fs.default.name</name>
       <value>hdfs://master:9000</value>
    </property>
    <property>
      <name>hadoop.tmp.dir</name>
       <value>/root/hadoopData/tmp</value>
    </property>
    <property>
      <name>io.file.buffer.size</name>
       <value>131072</value>
    </property>
    <property>
      <name>fs.checkpoint.period</name>
       <value>60</value>
    </property>
    <property>
      <name>fs.checkpoint.size</name>
       <value>67108864</value>
    </property>

</configuration>

三台机器都创建
mkdir -p /root/hadoopData/tmp


3,hdfs-site.xml配置文件============================
vim hdfs-site.xml  # 增加如下内容
# namenode临时文件所存放的目录
# datanode临时文件所存放的目录
# 关闭权限校验 集群间用hostname通信
<configuration>
   <property>
        <name>dfs.replication</name>
        <value>2</value>
   </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/root/hadoopData/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/root/hadoopData/data</value>
    </property>
    
    <property>
       <name>dfs.permissions</name>
       <value>false</value>
    </property>
    <property>
      <name>dfs.datanode.use.datanode.hostname</name>
      <value>true</value>
    </property>
    
    
</configuration>

三台机器都创建
mkdir -p /root/hadoopData/name
mkdir -p /root/hadoopData/data

4,YARN框架运行环境============================
echo "export JAVA_HOME=/usr/java/jdk1.8.0_221" >> yarn-env.sh





5.YARN框架的核心配置============================
vim yarn-site.xml  # 增加如下内容

<configuration>
<!-- 指定ResourceManager的地址-->
<property>
   <name>yarn.resourcemanager.address</name>
   <value>master:18040</value>
</property>

 <property>
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>master:18030</value>
 </property>
 
 <property>
   <name>yarn.resourcemanager.webapp.address</name>
   <value>master:18088</value>
 </property>
 
 <property>
   <name>yarn.resourcemanager.resource-tracker.address</name>
   <value>master:18025</value>
 </property>

<property>
   <name>yarn.resourcemanager.admin.address</name>
   <value>master:18141</value>
 </property>
 
<!-- 指定reducer获取数据的方式-->
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value>
</property>

<property>
  <name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property> 

</configuration>

6,拷贝并编辑MapReduce的配置文件:

cp mapred-site.xml.template mapred-site.xml
vim mapred-site.xml  # 增加如下内容

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

7,配置从节点:

echo master > master && echo slave1 > slaves  && echo slave2 >> slaves

8,分发到其它服务器上

cd /usr/hadoop
xsync.sh hadoop-2.7.7

2.格式化Hadoop并启停

在Master中对NameNode进行格式化操作:

hdfs namenode -format

启动集群:

start-all.sh

start-dfs.sh
start-yarn.sh

查看进程:

jps  
# 查看是否有以下几个进程

# Master节点:
6256 Jps
5843 ResourceManager
5413 NameNode
5702 SecondaryNameNode

# Slave节点
6256 Jps
5538 DataNode
5945 NodeManager

访问监控主页:

在浏览器上访问主节点的50070端口:192.168.42.128:50070。可以访问50070端口就代表集群中的HDFS是正常的。

访问主节点的8088端口,这是YARN的web服务端口,例如:192.168.42.128:8088

关闭节点:

stop-dfs.sh
stop-yarn.sh

===================================================

集成HIVE

1.mysql

  • 关闭开机自启服务
1.配置过本地源了,安装MySQL Server
安装MySQL:yum -y install mysql-community-server





systemctl disable mysqld

#开启服务
systemctl start mysqld

#查看密码
grep "temporary password" /var/log/mysqld.log



mysql -uroot -p
E&po>2BCjekL

#设置密码强度为低级:
set global validate_password_policy=0;
#设置密码长度:
set global validate_password_length=4;
#修改本地密码:
alter user 'root'@'localhost' identified by '123456';


设置远程登录
	以新密码登陆MySQL:mysql -uroot -p123456
	创建用户:create user 'root'@'%' identified by '123456';
	允许远程连接:grant all privileges on *.* to 'root'@'%' with grant option;
	刷新权限:flush privileges;

创建数据库hive;
create database hive character set utf8;

2.安装Hive 注意操作的机器

首先下载Hive_2.3.6

mkdir -p /usr/hive
cd /usr/package277/

tar -zxvf apache-hive-2.3.4-bin.tar.gz -C /usr/hive/

修改环境变量:

vim /etc/profile

# HIVE
export HIVE_HOME=/usr/hive/apache-hive-2.3.4-bin
export PATH=$PATH:$HIVE_HOME/bin

# 刷新配置
source /etc/profile

设置HIVE运行环境

1.运行环境 ==============
cd $HIVE_HOME/conf && cp hive-env.sh.template hive-env.sh && vim hive-env.sh

# 配置Hadoop安装路径
export HADOOP_HOME=/usr/hadoop/hadoop-2.7.7
# 配置Hive配置文件存放路径
export HIVE_CONF_DIR=/usr/hive/apache-hive-2.3.4-bin/conf
# 配置Hive运行资源库路径
export HIVE_AUX_JARS_PATH=/usr/hive/apache-hive-2.3.4-bin/lib


2.版本冲突=============两个机器都执行
cp $HIVE_HOME/lib/jline-2.12.jar $HADOOP_HOME/share/hadoop/yarn/lib/

分发
xsync.sh $HADOOP_HOME/share/hadoop/yarn/lib/

3.分发=============
xsync.sh apache-hive-2.3.4-bin/

xsync.sh /etc/profile

source /etc/profile

3.HIVE 元数据配置到MySQL

1,因为服务端需要和Mysql通信,所以服务端需要将Mysql的依赖包放在Hive的lib目录下。

cd /usr/package277
cp mysql-connector-java-5.1.47-bin.jar $HIVE_HOME/lib

2,Slave1作为服务器端配置hive

cd $HIVE_HOME/conf
vim hive-site.xml

<configuration>
<!-- Hive产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!-- 数据库连接driver,即MySQL驱动-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 数据库连接JDBC的URL地址-->
<property>
<name>javax.jdo.option.ConnectionURL</name> 
<value>jdbc:mysql://slave2:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</value>
</property>
<!-- MySQL数据库用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- MySQL数据库密码-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value>
</property>
</configuration>



4.Master作为客户端配置hive

1.=============
cd /usr/package277
cp mysql-connector-java-5.1.47-bin.jar $HIVE_HOME/lib

2.==============
cd $HIVE_HOME/conf
vim hive-site.xml

<configuration>
<!-- Hive产生的元数据存放位置-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive_remote/warehouse</value>
</property>
<!--- 使用本地服务连接Hive,默认为true-->
<property>
<name>hive.metastore.local</name>
<value>false</value>
</property>
<!-- 连接服务器-->
<property>
<name>hive.metastore.uris</name>
<value>thrift://slave1:9083</value>
</property>
</configuration>


5 .HIVE 元数据配置到MySQL

1.初始化数据库

slave1上:

schematool -dbType mysql -initSchema

2.启动hive server服务

设置成远程模式之后必须保证先启动metastore服务或者进程,之后才能进行开启客户端。

hive --service metastore(注意空格)

3.启动hive client 在master上

hive

4,创建数据库hongyaa

hive>create database hive;

===============================================

增删节点

  1. 修改主机名用hostnamectl命令

    关闭防火墙
    systemctl stop firewalld
    关闭开机启动
    systemctl disable firewalld.service
    
    
    hostnamectl set-hostname slave3
    bash
    
  2. 修改host文件

    先免密登录,然后修改下分发文件脚本
    ssh-copy-id slave3
    
    vim /etc/hosts
    
    192.168.5.100 master
    192.168.5.101 slave1
    192.168.5.102 slave2
    172.16.10.0 slave3
    
    source /etc/profile
    
  3. 时区修改成上海时区(CST +0800时区)

    tzselect
    TZ='Asia/Shanghai'; export TZ
    date 查看
    
    echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile && source /etc/profile
    
  4. 每十分钟同步一次时间

     crontab -e 
     
     */10 * * * * /usr/sbin/ntpdate master
     
     crontab -l
     
     #安装和启动NTP
     yum install -y ntp
     ntpdate master
    
  5. 分发jdk 和环境变量

    xsync.sh /usr/java/jdk1.8.0_221/
    
    xsync.sh /etc/profile
    
    source /etc/profile
    
    mkdir -p /root/hadoopData/tmp
    mkdir -p /root/hadoopData/name
    mkdir -p /root/hadoopData/data
    
    分发hadoop
    
    
  6. 启动节点进程

启动datanode进程:$HADOOP_HOME/sbin/hadoop-daemon.sh start datanode
启动nodemanage进程:$HADOOP_HOME/sbin/yarn-daemon.sh start nodemanager



  1. 查看集群状态

    主节点刷新:hdfs dfsadmin -refreshNodes
    均衡block:sbin/start-balancer.sh
    查看存活的节点:hdfs dfsadmin -report 
    
    
    可以通过浏览器查看50070
    
    二,永久删除:(通过此步骤执行)
1. 注意版本号
master主机中hdfs-site.xml配置如下

<property>
         <name>dfs.hosts.exclude</name>
         <value>/usr/hadoop/hadoop-2.7.7/etc/hadoop/excludes</value>
         <description>拒绝加入集群的节点列表</description>
</property>

2.然后在conf目录下创建一个excludes文件,将需要删除的节点机器名添加到文件中即可。

3.强制重新加载配置:
主节点刷新所有DataNode:hdfs dfsadmin -refreshNodes
查看存活的节点:hdfs dfsadmin -report 

4.删除节点上关闭进程:(slave2)
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager

5.(时间间隔较久,500s)再次查看节点状态:hdfs dfsadmin -report

6.最后更新集群配置
数据块重新分布:sbin/start-balancer.sh(数据均衡)
从NameNode的excludes文件及slaves文件、hosts文件中去掉已经移除的主机名


以上是关于分布式hadoop 部署的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop分布式集群实战

Hadoop分布式集群部署

大数据之---hadoop伪分布式部署(HDFS)全网终极篇

大数据之---hadoop伪分布式部署(HDFS)全网终极篇

CentOS7 下 Hadoop 分布式部署

Hadoop的完全分布式部署