Hadoop2 + Centos7 完全分布式配置

集群规划

内存有限,只搞3台机器

主机名IP角色
master172.16.76.140zk
slave1172.16.76.141zk
slave2172.16.76.141zk

ssh免密登录

本地DNS设置

在每台机器的 /etc/hosts中写入每台机器的别名和ip地址

172.16.76.140 master
172.16.76.141 slave1
172.16.76.142 slave2

生成公钥和私钥

  • master机器上免密

master机器上,使用命令生成

ssh-keygen -t rsa

输入后,连续3次回车

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
af:0f:a9:87:43:8d:02:e4:c4:5b:aa:68:57:e8:3f:7d root@master
The key's randomart image is:
+--[ RSA 2048]----+
| .               |
|  + .            |
| + +.            |
|  =. .           |
|.....  oS        |
|o. o. o .o       |
|. . .o..o .      |
|     ooo.E       |
|      ooo..      |
+-----------------+

此时会在用户的根目录下生成.ssh的一个隐藏文件夹。进入到文件夹中有两个文件

-rw-------. 1 root root 1679 Nov  5 15:32 id_rsa
-rw-r--r--. 1 root root  393 Nov  5 15:32 id_rsa.pub

配置master节点可以直接ssh访问
进入master节点的.ssh目录

cat id_rsa.pub >> authorized_keys

此时,直接使ssh master就可以免密登录了

  • 其他节点免密

    • 在其他节点上使用ssh-keygen -t rsa生成公钥和私钥,
    • 将节点上 的id_rsa.pub文件的内容拷贝到master的.ssh文件的 authorized_keys文件中
    • 将master节点的.ssh文件的 authorized_keys文件分发到slave1slave2上

      scp authorized_keys  root@slave2:/root/.ssh/

从不同的节点ssh到其他节点试一下,第一次可能需要输入yes

ECDSA key fingerprint is 94:d0:43:a9:48:f2:76:26:88:7c:2c:29:ec:52:ca:c4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'slave2,172.16.76.142' (ECDSA) hto the list of known hosts.
Last login: Mon Nov  5 15:50:12 2018 from slave1

Java配置

下载

这里用的JDK8(java-8u191),下载linux版本的压缩包(.tar.gz) 下载地址

配置

  • 在根目录下创建了java目录,将jdk-8u191-linux-x64.tar.gz解压到java目录
  • 配置环境变量/etc/profile,加入

    export JAVA_HOME=/root/apps/java/jdk1.8.0_191
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    修改完成后记得用命令更新一下 source /etc/profile
  • 输入命令测试一下

    java
    javac -version
    java -version

每台机器都装一下,可以直接scp数据过去

scp -r apps/java root@slave1:/root/apps/
scp -r apps/java root@slave2:/root/apps/

zookeeper安装

zookeeper的配置需要使用奇数个数的节点,因此我们给3台机器都配置上zookeeper.

下载

下载zookeeper稳定版(这里用的zookeeper-3.4.12) 下载地址

配置

  • 解压包到/root/apps下,并命名为zookeeper.
  • 修改环境变量

    export ZOOKEEPER_HOME=/root/apps/zookeeper-3.4.5
    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    修改完成后记得用命令更新一下 source /etc/profile

  • 配置zookeeper
    • 创建目录

      /root/data/zookeeper/data
      /root/data/zookeeper/logs
    • 修改zookeeper目录下的conf/zoo.cfg.如没有,可以使用命令

      cp zoo_sample.cfg zoo.cfg
    • 修改zoo.cfg中的dataDir 为上面创建的第一个目录
    • 修改zoo.cfg中的dataLogDir 为上面创建的第二个目录
    • 添加为zookeeper的服务地址信息

      server.1=master:2888:3888
      server.2=slave1:2888:3888
      server.3=slave2:2888:3888
    • dataDir中编译一个文件myid(如果没有创建一个,里面的值为1)
    • 分发zookeeper到其他机器。
    • 修改每个机器上的

  • 关闭防火墙

    firewall-cmd --state # 查看防火墙状态
    systemctl stop firewalld.service # 停止firewall
    systemctl disable firewalld.service # 禁止firewall开机启动

启动和状态检查

在每一台安装了zookeeper的机器上启动zookeeper.

zkServer.sh start

jps查看启动的状态

[root@master data]# jps
3082 Jps
3021 QuorumPeerMain

zkServer.sh status 查看状态

ZooKeeper JMX enabled by default
Using config: /root/apps/zookeeper/bin/../conf/zoo.cfg
Mode: leader

正确的话,应该是1个leader,2个follower.

zkServer.sh stop 停止zookeeper服务

hadoop安装

此处不配置HA(本地环境机器资源有限,玩不了那么多)

下载

官网下载地址

下载完成后解压到一个目录

配置

  1. 配置环境变量
export HADOOP_HOME=/root/apps/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  1. 修改 hadoop-env.sh
export JAVA_HOME=/root/apps/java/jdk1.8.0_191
  1. 修改yarn-env.sh文件
export JAVA_HOME=/root/apps/java/jdk1.8.0_191
  1. 修改slaves文件
    加入从节点的主机名
slave1
slave2
  1. 修改 core-site.xml
<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:8020</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
        
</configuration>
  1. 修改文件 hdfs-site.xml的配置
<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/hadoop/tmp/dfs/data</value>
        </property>
</configuration>
  1. 文件 mapred-site.xml
<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
</configuration>
  1. 文件 yarn-site.xml
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
     </property>
    <property>
        <name>yarn.nodemanager.aux-services</name> 
        <value>mapreduce_shuffle</value> 
    </property> 
</configuration>
  1. 将配置发送到其他机器

scp命令将配置发送到slave机器上的相同目录下

  1. 格式化数据

首次启动需要先在 Master 节点执行 NameNode 的格式化:

hdfs namenode -format

至此,hadoop不含HA和ZKFC的安装就完毕了

启动安装的hadoop集群

在master节点上使用命令启动hdfsyarn

start-dfs.sh
start-yarn.sh

使用jps命令可以看到相关进行信息

master(namenode)节点上

2977 ResourceManager
3842 Jps
3305 QuorumPeerMain
2603 NameNode
2815 SecondaryNameNode

slave(datanode)节点上

2305 DataNode
2434 NodeManager
2596 QuorumPeerMain
2687 Jps

hbase安装

下载

官网下载地址

下载完成后解压到一个/root/app 目录下

配置

  • 配置环境变量

    export HBASE_HOME=/root/apps/hbase
    export PATH=$PATH:$HBASE_HOME/bin
  • 配置hdfs-site.xml

    说实话不知道这步要不要配置,将hadoop配置文件里面的hdfs-site.xml文件拷贝到此处即可

  • 配置hbase-env.sh

    找到如下变量进行配置

    # 导出环境变量JAVA_HOME
    export JAVA_HOME=/root/apps/java/jdk1.8.0_191
    # 指定HBASE_CLASSPATH 为 HADDOP_CONF_DIR
    export HBASE_CLASSPATH=/root/apps/hadoop/etc/hadoop
    # 指定zookeeper为自定义的,而非hbase自带的
    export HBASE_MANAGES_ZK=false
  • 配置hbase-site.xml

    <configuration>
        <property>
        <name>hbase.cluster.distributed</name> <!-- 是否分布式部署 -->
        <value>true</value>
      </property>
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://master:8020/hbase</value>
            <description>HBase数据存储目录</description>
        </property>
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
            <description>指定HBase运行的模式:false:单机/伪分布;true:完全分布</description>
        </property>
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>master,slave1,slave2</value>
            <description>指定ZooKeeper集群</description>
        </property>
        <property>
            <name>hbase.zookeeper.property.clientPort</name>
            <value>2181</value>
            <description>Property from ZooKeeper's config zoo.cfg. The port at which the clients will connect.</description>
        </property>
        <property>
            <name>hbase.zookeeper.property.dataDir</name>
            <value>/root/data/zookeeper/data</value>
            <description>Property from ZooKeeper's config zoo.cfg.The directory where the snapshot is stored. </description>
        </property>
    </configuration>
  • 分发到其他机器

  • 启动hbase

    # 在哪台机器上启动哪台机器就是Hmaster
    start-hbase.sh

hadoop相关组件的启停

启动顺序

  • Hadoop及hbase集群启动顺序

    zookeepeer->hadoop->hbase

  • Hadoop及hbase集群关闭顺序

    hbase->hadoop->zookeepeer

启停ZK

  • 启动和停止ZK

    /home/zookeeper-3.4.6/bin/zkServer.sh start | stop

启动hadoop集群

  • 启动及停止Hadoop方式一

    • 启停yarn及hdfs(一起启动)

      /data/hadoop/sbin/start-all.sh | stop-all.sh
    • 启停historyserver进程

      /data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver
  • 启动及停止Hadoop方式二

    • 启停hdfs集群

      /data/hadoop/sbin/start-dfs.sh | stop-dfs.sh
    • 启停yarn集群

      /data/hadoop/sbin/start-yarn.sh | stop-yarn.sh
    • 启停historyserver进程

      /data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver

启动及停止Hadoop方式三

  • 启停hdfs单个进程

    /data/hadoop/sbin/hadoop-daemon.sh start | stop namenode
    
    /data/hadoop/sbin/hadoop-daemon.sh start | stop datanode
    
    /data/hadoop/sbin/hadoop-daemon.sh start | stop journalnode
    
    /data/hadoop/sbin/hadoop-daemon.sh start | stop zkfc
  • 启停yarn单个进程

    /data/hadoop/sbin/yarn-daemon.sh start | stop resourcemanager
    
    /data/hadoop/sbin/yarn-daemons.sh start | stop nodemanager
  • 启停historyserver进程

    /data/hadoop/sbin/mr-jobhistory-daemon.sh start | stop historyserver

启停Hbase集群

  • 启动及停止Hbase方式一

    • 启停HBase集群

      /data/hbase/bin/start-hbase.sh | stop-hbase.sh
  • 启动及停止Hbase方式二

    • 启停单个Hbase进程

      /data/hbase/bin/hbase-daemon.sh start | stop master
      /data/hbase/bin/hbase-daemon.sh start | stop regionserver

hive安装

下载

下载地址

下载完成后解压到/root/apps/hive目录

配置环境变量

#hive安装配置
export HIVE_HOME=/root/apps/hive
export PATH=$PATH:$HIVE_HOME/bin

hdfs上创建相关目录和设置权限

hadoop fs -mkdir       /tmp
hadoop fs -mkdir       /hive
hadoop fs -chmod g+w   /tmp
hadoop fs -chmod g+w   /hive

安装并配置mysql服务

  • 安装

    参考这篇文章centos7下安装mysql5.7

  • 配置

    • 创建hive数据库

      create database hive;    
    • 创建hive用户并赋予权限

      create user "hive" identified by "up213wifi";
      GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'up213wifi' WITH GRANT OPTION;
      flush privileges;

配置hive

hive是hadoop的一个客户端,不需要所有的机器上都安装hive,这点和hadoop和hbase不一样

  • hive-default.xml.template文件拷贝成hive-site.xml
  • 配置 hive-site.xml

    <configuration>
      <!-- 设置 hive仓库的HDFS上的位置 -->
      <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>/hive</value>
        <description>location of default database for the warehouse</description>
      </property>
      <!-- 设置元数据存放的数据库地址、名字 -->
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://slave3:3306/hive?useSSL=false</value>
        <description>
          JDBC connect string for a JDBC metastore.
          To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
          For example, jdbc:postgresql://myhost/dbName?ssl=true for postgres database.
        </description>
      </property>
    <!--Driver class名字-->
      <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
        <description>Driver class name for a JDBC metastore</description>
      </property>
    
    <!--连接使用的用户名-->
      <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>hive</value>
        <description>Username to use against metastore database</description>
      </property>
      <!--连接使用的密码-->
      <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>up213wifi</value>
        <description>password to use against metastore database</description>
      </property>
      <!--io相关的临时文件存放位置 -->
      <property>
        <name>hive.exec.local.scratchdir</name>
        <value>/root/data/hive/iotemp</value>
        <description>Local scratch space for Hive jobs</description>
      </property>
      <!--资源临时文件存放位置-->
        <property>
        <name>hive.downloaded.resources.dir</name>
        <value>/root/data/hive/iotemp</value>
        <description>Temporary local directory for added resources in the remote file system.</description>
      </property>
    </configuration>
    
  • 修改hive-env.sh

    拷贝一份hive-env.sh

    cp hive-env.sh.template hive-env.sh

    修改数据

    HADOOP_HOME=/root/apps/hadoop
    export HIVE_CONF_DIR=/root/apps/hive/conf
  • 拷贝mysql的jar包

    拷贝mysql的jar包到${HIVE_HOME}/lib

  • 修改log4j文件

    cp hive-log4j2.properties.template hive-log4j2.properties
    cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

使用schematool初始化

schematool -dbType mysql -initSchema

会显示一段文字

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/root/apps/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/root/apps/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:    jdbc:mysql://slave3:3306/hive?useSSL=false
Metastore Connection Driver :    com.mysql.jdbc.Driver
Metastore connection User:   hive
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

表示初始化成功

初始化完成后进入到mysql数据库中(使用hive的数据库)

use hive;
show tables;

可以看到如下的数据表已经给被创立了

+---------------------------+
| Tables_in_hive            |
+---------------------------+
| AUX_TABLE                 |
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_COMPACTIONS     |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS           |
| DBS                       |
| DB_PRIVS                  |
| DELEGATION_TOKENS         |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| HIVE_LOCKS                |
| IDXS                      |
| INDEX_PARAMS              |
| KEY_CONSTRAINTS           |
| MASTER_KEYS               |
| NEXT_COMPACTION_QUEUE_ID  |
| NEXT_LOCK_ID              |
| NEXT_TXN_ID               |
| NOTIFICATION_LOG          |
| NOTIFICATION_SEQUENCE     |
| NUCLEUS_TABLES            |
| PARTITIONS                |
| PARTITION_EVENTS          |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_PRIVS            |
| PART_COL_STATS            |
| PART_PRIVS                |
| ROLES                     |
| ROLE_MAP                  |
| SDS                       |
| SD_PARAMS                 |
| SEQUENCE_TABLE            |
| SERDES                    |
| SERDE_PARAMS              |
| SKEWED_COL_NAMES          |
| SKEWED_COL_VALUE_LOC_MAP  |
| SKEWED_STRING_LIST        |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES             |
| SORT_COLS                 |
| TABLE_PARAMS              |
| TAB_COL_STATS             |
| TBLS                      |
| TBL_COL_PRIVS             |
| TBL_PRIVS                 |
| TXNS                      |
| TXN_COMPONENTS            |
| TYPES                     |
| TYPE_FIELDS               |
| VERSION                   |
| WRITE_SET                 |
+---------------------------+
57 rows in set (0.00 sec)

启动hive

HiveServer2是HiveServer改进版本,它提供给新的ThriftAPI来处理JDBC或者ODBC客户端,进行Kerberos身份验证,多个客户端并发,HS2还提供了新的CLI:BeeLine,是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作为Hive JDBC Client 端访问HievServer2,启动一个beeline就是维护了一个session.

  • 服务启动方式

    hiveserver2
  • 客户端启动方式

    hive

补充说明

hive作为一个客户端,你可以在任何的机器上配置好以后安装,这样,只要有hive的机器上就可以使用hive来进行操作了。

转载于:https://www.cnblogs.com/rilweic/articles/10107662.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值