伪分布式集群环境搭建、jdk、hadoop、zk、hbase、hive、mysql

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32297447/article/details/79734894
准备工作
一台机子(静态ip、映射)
hadoop用户下准备:
jdk1.8:
hadoop3.0
zookeeper3.4.1
hbase1.4.2
hive2.3.2
root用户下准备:
mysql
1.1 创建用户
创建hadoop用户组:useradd -m hadoop -G root -s /bin/bash
设置hadoop用户密码:passwd hadoop
设置hadoop用户权限: 命令visudo 92行copy一下,把root改成hadoop
1.2 SSH无密码登录
切换到hadoop用户下,如果没有.ssh目录输入ssh localhost命令即可
进到.ssh目录输入ssh-keygen -t rsa生成秘钥
然后在主机创建一个authorized_keys文件, 并修改其权限
chmod go-rw authorized_keys
将id_rsa.pub追加到authorized_keys中
cat id_rsa.pub >> authorized_keys

2.1上传包、解压、重命名



2.2 环境变量
#Jdk
export JAVA_HOME=/home/hadoop/app/jdk
#Hadoop
export HADOOP_HOME=/home/hadoop/app/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
# Zookeeper
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
# HBase
export HBASE_HOME=/home/hadoop/app/hbase
# Hive
export HIVE_HOME=/home/hadoop/app/hive
# PATH
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$ZOOKEEPER_HOME/bin:$HBASE_HOME/bin:$HIVE_HOME/bin

2.3 Hadoop 伪分布式
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
Hadoop的伪分布式配置需要设置环境变量,不设置的会报错,伪分布式的配置我们仍然使用主机Master即可,Master既是NameNode,同时也是DataNode。
NameNode:主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等。故这是一个核心节点
DataNode:数据节点,每台从服务器节点都运行一个,负责把HDFS数据块读、写到本地文件系统
Hadoop 伪分布式 配置文件
core-site.xml :此文件是Hadoop的核心配置文件
hdfs-site.xml :用于配置NameNode的URI及NameNode和DataNode的存放位置
core-site.xml
<configuration>
<!-- Hadoop 文件系统的临时目录(NameNode和DataNode默认存放在hadoop.tmp.dir目录)-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/app/hadoop/tmp</value>
</property>
<!-- 配置NameNode的URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master27:9000</value>
</property>
</configuration>
hdfs-site.xml 
<configuration>
<!-- Master可替换为IP -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master27:50090</value>
</property>
<!-- 设置系统里面的文件块的数据备份个数,默认是3 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!-- NameNode结点存储hadoop文件系统信息的本地系统路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/app/hadoop/tmp/dfs/name</value>
</property>
<!-- DataNode结点被指定要存储数据的本地文件系统路径,这个值只
对NameNode有效,DataNode并不需要使用到它 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/app/hadoop/tmp/dfs/data</value>
</property>
</configuration>
启动hadoop伪分布式
关闭防火墙:
systemctl disable firewalld
systemctl stop firewalld
进程守护
setenforce 0
vi /etc/selinux/config 设置SELINUX=disabled
格式化
hdfs namenode -format(第一次启动一定要对hadoop进行文件系统格式化(主机上),否则hadoop配置文件就得重新配置了)
status 显示为0,表示成功
启动命令:
start-dfs.sh
停止命令:
stop-dfs.sh
成功之后jps下可查看到如下进程
Jps、NameNode、DataNode、SecondaryNameNode
可以访问页面

创建用户目录:hdfs dfs -mkdir -p /user/hadoop
复制文件:
hdfs dfs -put /home/hadoop/app/hadoop/etc/hadoop/*.xml /user/hadoop/input
查看文件列表:hdfs dfs -ls /input
3.0版的删除是可以在页面WEB UI上操作的

注意(因为博主这里用的是hadoop3.0版本所以有很多端口是不一样的,详细的可以去官网查看)
Namenode 端口: 
50470 --> 9871
50070 --> 9870
8020 --> 9820
Secondary NN 端口:
50091 --> 9869
50090 --> 9868
Datanode 端口: 
50020 --> 9867
50010 --> 9866
50475 --> 9865
50075 --> 9864
2.3 Zookeeper
环境配置
在 zookeeper 安装目录下的 conf 目录下有一个名为 zoo_sample.cfg 的文件,拷贝该文件命名为zoo.cfg,我们需要配置该文件,zookeeper 在启动时会找这个文件作为默认配置文件。执行如下命令
cp zoo_sample.cfg zoo.cfg
编辑zoo.cfg
修改:dataDir=/home/hadoop/app/zookeeper/tmp
启动 zookeeper
zkServer.sh start
关闭zookeeper
zkServer.sh stop
启动journalnode
hadoop-daemon.sh start journalnode

2.4 base1.4.2
配置hbase-env.sh,最下面添加 :vi hbase-env.sh
# hbase 安装目录下创建logs目录
export HBASE_LOG_DIR=${HBASE_HOME}/logs
# hbase 安装目录下创建pids目录
export HBASE_PID_DIR=${HBASE_HOME}/pids
# 使用外部zk,true表示使用hbase自带的zk
export HBASE_MANAGES_ZK=false
# 指定hadoop 目录
export HADOOP_HOME=/home/hadoop/app/hadoop
配置hbase-site.xml
<configuration>
<!-- 设置HRegionServers共享目录,用来持久化 HBase
注意:hbase.rootdir 里面的 HDFS 地址是要跟 Hadoop 的 core-site.xml 里面的 fs.defaultFS 的 HDFS 的 IP 地址或者域名、端口必须一致
-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://mster27:9000/hbase</value>
</property>
<!-- 此处必须为true,不然hbase仍用自带的zk,若启动了外部的zookeeper,会导致冲突,hbase启动不起来 -->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 本地文件系统的临时文件夹(/tmp会在重启时清除) -->
<property>
<name>hbase.tmp.dir</name>
<value>/home/hadoop/app/hbase/tmp</value>
</property>
<!-- ZooKeeper的zoo.conf中的配置(dataDir所设定的位置),快照的存储位置 -->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/app/zookeeper/data</value>
</property>
<!-- ZooKeeper 会话超时。Hbase 把这个值传递给 zk 集群,向它推荐一个会话的最大超时时间 -->
<property>
<name>zookeeper.session.timeout</name>
<value>120000</value>
</property>
<!-- 当 regionserver 遇到 ZooKeeper session expired , regionserver 将选择 restart 而不是 abort -->
<property>
<name>hbase.regionserver.restart.on.zk.expire</name>
<value>true</value>
</property>
<!-- ZK位置(HBase使用外部ZK,hbase-env.sh中属性HBASE_MANAGES_ZK要设置为false),必须ZK数量必须为奇数,多个可用逗号分隔 -->
<property>
<name>hbase.zookeeper.quorum</name>
<value>localhost</value>
</property>
</configuration>
启动hbase
start-hbase.sh
启动成功之后会显示如下进程
HMaster、SecondaryNameNode、ResourceManager、NodeManager NameNode、Jps、DataNode、QuorumPeerMain、HRegionServer
2.5 mysql
root用户下上传mysql包
授予mysql安装包可执行权限(如果已拥有了可执行权限,此步骤可省略)
chmod 755 mysql*
执行如下命令依次安装
rpm -ivh mysql-community-common-5.7.20-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-5.7.20-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-compat-5.7.20-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-5.7.20-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-5.7.20-1.el7.x86_64.rpm --nodeps --force
mysql 安装完成后,输入如下命令启动 mysql 服务
systemctl start mysqld.service
systemctl status mysqld.service
设置mysql root 用户密码
输入如下命令查看 root 用户的初始化密码
grep 'temporary password' /var/log/mysqld.log
登录mysql -uroot -p"密码"
ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd'; 修改密码
flush privileges; 命令使修改密码后立即生效
quit; 退出
使用工具连接mysql:
windows cmd 下可以 ping 通 centos7 的ip
登录 mysql 授予 root 用户远程登录权限:
mysql> grant all privileges on *.* to 'root'@'%' identified by 'P@ssw0rd' with grant option; mysql> flush privileges;

2.6 hive2.3.2
前提: 配置hive环境之前先确定root用户下是否已经安装mysql数据库
配置hive-site.xml文件
进入hive的conf目录下,拷贝文件hive-default.xml.template命名为hive-site.xml
cp hive-default.xml.template hive-site.xml
<configuration>  
              <property>//39行  
<name>hive.exec.scratchdir</name>  
          <value>/home/hadoop/app/hive/tmp/hive</value>  
<description>hive用于存储不同阶段map/reduce的执行计划及存储中间输出结果的目录</description>  
</property>  
<property>//79行  
<name>hive.downloaded.resources.dir</name>  
<value>/home/hadoop/app/hive/tmp/${hive.session.id}_resources</value>  
                       <description>hive下载资源的存储目录</description>  
                     </property>  
 <property>//1685行  
                         <name>hive.querylog.location</name>  
                         <value>/home/hadoop/app/hive/tmp/hive</value>  
                         <description>hive结构日志存储目录</description>  
                      </property>  
                  <property>//3976行  
                     <name>hive.server2.logging.operation.log.location</name>  
                     <value>/home/hadoop/app/hive/tmp/hive/operation_logs</value>  
                     <description>hive的操作日志目录</description>  
                   </property>  
    <property>//84行  
                        <name>hive.scratch.dir.permission</name>  
                        <value>700</value>  
                        <description>hive访问hadoop文件权限设置</description>  
                </property>  
   <property>//529行  
                        <name>javax.jdo.option.ConnectionPassword</name>  
                        <value>P@ssw0rd</value>  
                        <description>元数据存储的数据库的密码</description>  
                    </property>  
    <property>//1044行  
                         <name>javax.jdo.option.ConnectionUserName</name>  
                         <value>root</value>  
                         <description>元数据存储数据库的用户名</description>  
                    </property>  
    <property>//545行  
                        <name>javax.jdo.option.ConnectionURL</name>  
                        <value>jdbc:mysql://master27:3306/hive_metadata?createDatabaseIfNotExist=true&characterEncoding=utf8</value>  
                        <description>元数据存储的数据库的url</description>  
                    </property>  
   <property>//1020行  
                        <name>javax.jdo.option.ConnectionDriverName</name>  
                        <value>com.mysql.jdbc.Driver</value>  
                        <description>元数据存储的数据库的驱动</description>  
                    </property>  
    <property>//741行  
                        <name>datanucleus.schema.autoCreateAll</name>  
                        <value>true</value>  
                        <description>开启自动创建(生产环境中不推荐使用)</description>  
                    </property>  
    <property>//746行  
                        <name>hive.metastore.schema.verification</name>  
                        <value>false</value>  
                    </property>  
                <!------------ 配置hive的事务 start ------------>  
                 <property>//2445行  
                         <name>hive.optimize.sort.dynamic.partition</name>  
                         <value>false</value>  
                    </property>  
                    <property>//2775行  
                        <name>hive.support.concurrency</name>  
                        <value>true</value>  
                 </property>  
    <property>找不到的话,在任意位置添加上即可  
                        <name>hive.enforce.bucketing</name>  
                        <value>true</value>  
                    </property>  
    <property>//250行  
                        <name>hive.exec.dynamic.partition.mode</name>  
                        <value>nonstrict</value>  
                    </property>  
    <property>//2870行  
                        <name>hive.txn.manager</name>  
                        <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>  
                    </property>  
    <property>//2964行  
                        <name>hive.compactor.initiator.on</name>  
                        <value>true</value>  
                    </property>  
    <property>//2974行  
                        <name>hive.compactor.worker.threads</name>  
                        <value>1</value>  
                    </property>  
    <property>找不到的话,在任意位置添加上即可  
                        <name>hive.in.test</name>  
                        <value>true</value>  
   </property>  
                    <!------------ 配置hive的事务 end ------------>  
    <property>//1195  
                        <name>hive.cli.print.current.db</name>  
                        <value>true</value>  
                    </property>  
            </configuration>
lib下面添加mysql依赖包

初始化启动hive
schematool -dbType mysql -initSchema
启动之前要确保启动hadoop集群
hive1
$ hive 查看所有数据库,默认的数据库default
hive启动成功后,查看hive的临时目录下会生成如下文件
$ cd /home/hadoop/hive/tmp/
hive2
$ hiveserver2启动成功后另起一个窗口
$ beeline -u jdbc:hive2:// 链接

进入hive客户端报错
$ hive
错误信息:Name node is in safe mode.
解决方法:执行如下命令离开安全模式
$ hadoop dfsadmin -safemode leave

启动命令顺序:
zkServer.sh start
start-dfs.sh
start-yarn.sh
start-hbase.sh (使用hive可以不用启动hbase)
关闭命令顺序:
stop-hbase.sh
stop-yarn.sh
stop-dfs.sh
zkServer.sh stop

猜你喜欢

转载自blog.csdn.net/qq_32297447/article/details/79734894