hadoop生态组件安装

    xiaoxiao2022-06-24  295

    本文是在自己工作中用到各个组件的安装方式的记录,包括:hadoop,hbase,kafka,es,hive,flume,druid,flink,spark等,在持续更新中。具体的使用记录另有博文具体介绍。

    hdfs

    这里是列表文本Hadoop有三种分布模式:单机模式、伪分布、全分布模式,本文讲解分布式搭建方式。 假设有a,b,c三个节点。

    第一步:新建用户

    # 增加用户,并赋予其密码 $ adduser hadoop $ passwd hadoop # ur password for eagle user # 赋予用户root权限 $ chmod u+w /etc/sudoers $ vim /etc/sudoers # 找到 `root ALL=(ALL) ALL`这行,并在下面添加hadoop用户 hadoop ALL=(ALL) ALL $ chmod u-w /etc/sudoers # 切换到 hadoop用户 $ su - hadoop $ cd /home/hadoop # 存放软件目录 & 安装目录 & 日志目录 $ mkdir install && mkdir software && mkdir logs

    第二步:修改节点用户名/安装jdk/ssh免密登陆:

    ##修改用户名 $ vim /etc/hostname //三个节点分别叫bigdata-01,bigdata-02,bigdata-03. 然后重启节点。 ##安装jdk参考博文[ZOOKEEPER安装及测试](https://my.oschina.net/112612/blog/1584832 "ZOOKEEPER安装及测试") ## ssh免密登陆参见博文[免密登陆脚本(shell版)](https://my.oschina.net/112612/blog/1560133 "免密登陆脚本(shell版)")

    第三部 下载并安装hadoop

    $ cd /home/hadoop/install/ $ wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.8.4/hadoop-2.8.4.tar.gz $ tar zxvf hadoop-2.8.4.tar.gz -C ~/software/ $ cd ~/software/ $ ln -s hadoop-2.8.4/ hadoop $ cd hadoop/ $ bin/hadoop version Hadoop 2.8.4

    配置

    $ vim ~/.bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi # User specific aliases and functions # Hadoop Environment Variables export HADOOP_HOME=~/software/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 JAVA_HOME=~/software/java export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin $ source ~/.bashrc

    配置文件处理

    一共涉及以下几个文件

    ~/hadoop-2.8.4/etc/hadoop/hadoop-env.sh ~/hadoop-2.8.4/etc/hadoop/yarn-env.sh ~/hadoop-2.8.4/etc/hadoop/slaves ~/hadoop-2.8.4/etc/hadoop/core-site.xml ~/hadoop-2.8.4/etc/hadoop/hdfs-site.xml ~/hadoop-2.8.4/etc/hadoop/mapred-site.xml ~/hadoop-2.8.4/etc/hadoop/yarn-site.xml #以上文件默认不存在的,可以复制相应的template文件获得

    在修改之前,首先新建3个文件夹

    $ cd /home/hadoop/software/ mkdir -p /data/tmp mkdir -p /data/dfs/namenode mkdir -p /data/dfs/datanode 修改文件1.hadoop-env.sh 修改JAVA_HOME值(export JAVA_HOME=/home/software/java) 修改文件2.yarn-env.sh 修改JAVA_HOME值(export JAVA_HOME=/home/software/java) 修改文件3:slaves bigdata-02 bigdata-03 修改文件4: $ vim ~/software/hadoop/etc/hadoop/core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/software/hadoop/data/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://bigdata-01:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> </configuration> 修改文件5: $ vim ~/software/hadoop/etc/hadoop/hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/home/hadoop/software/data/dfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/home/hadoop/software/data/dfs/datanode</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>bigdata-01:9001</value> </property> </configuration> 修改文件6:mapred-site.xml <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>bigdata-01:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>bigdata-01:19888</value> </property> </configuration> 修改文件7:yarn-site.xml <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>bigdata-01:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>bigdata-01:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>bigdata-01:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>bigdata-01:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>bigdata-01:8088</value> </property> </configuration> 修改日志文件 $ mkdir -p /home/hadoop/logs/hadoop-hdfs/ $ vim ~/software/hadoop/etc/hadoop/log4j.properties # log4j.appender.RFAAUDIT.File=${hadoop.log.dir}/hdfs-audit.log log4j.appender.RFAAUDIT.File=/home/hadoop/logs/hadoop-hdfs/hdfs-audit.log

    将以上操作的文件复制到另外两个节点上。 然后在bigdata-01上执行格式化并启动hadoop

    $ bin/hdfs namenode -format cd ../sbin;./start-dfs.sh

    bigdata-01(master)出现以下现象则成功启动 [hadoop@lihao ~]$ jps 2324 NameNode 2839 Jps 2601 SecondaryNameNode slave上则只有datanode进程。

    启动yarn:
    start-yarn.sh

    最后在浏览器中输入:http://ip:50070,如果出现hadoop界面则安装成功,如果jps没有问题,而界面没有出现,则检查防火墙。

    hbase

    由于只有一台服务器,故只能搭建伪分布式集群。由于搭建hbase必须有zk和jdk,故也顺道搭建了zk的伪分布集群。

    zk伪分布式集群搭建 所谓的“伪分布式集群”就是在一台服务器中,启动多个Zookeeper实例。“完全分布式集群”是每台服务器,启动一个Zookeeper实例。参见【zk操作】中下载zk安装包 cp conf/zoo_sample.cfg conf/zoo1.cfg vim zoo1.cfg dataDir=/home/hadoop/software/zookeeper/zoo1/data clientPort=2181 #增加1 server.1=lihao:2888:3888 server.2=lihao:2889:3889 server.3=lihao:2890:3890 cp conf/zoo_sample.cfg conf/zoo2.cfg vim zoo1.cfg dataDir=/home/hadoop/software/zookeeper/zoo2/data clientPort=2182 #增加2 server.1=lihao:2888:3888 server.2=lihao:2889:3889 server.3=lihao:2890:3890 cp conf/zoo_sample.cfg conf/zoo3.cfg vim zoo1.cfg dataDir=/home/hadoop/software/zookeeper/zoo3/data clientPort=2183 #增加 server.1=lihao:2888:3888 server.2=lihao:2889:3889 server.3=lihao:2890:3890

    然后执行

    mkdir -p ..../zookeeper/zoo1/data mkdir -p ..../zookeeper/zoo2/data mkdir -p ..../zookeeper/zoo3/data echo '1'>zoo1/data/myid echo '2'>zoo1/data/myid echo '3'>zoo1/data/myid

    然后启动三个节点

    bin/zkServer.sh start conf/zoo1.cfg bin/zkServer.sh start conf/zoo2.cfg bin/zkServer.sh start conf/zoo3.cfg

    最后检查每个节点的状态:

    bin/zkServer.sh status conf/zooX.cfg

    hbase安装

    下载链接

    修改conf/hbase-env.sh

    export JAVA_HOME=JDK_PATH export HBASE_CLASSPATH=/home/hadoop/software/hbase/conf export JAVA_CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export HBASE_OPTS="-XX:+UseConcMarkSweepGC" export HBASE_MANAGES_ZK=true [如果你是使用hbase自带的zk就是true,如果使用自己的zk就是false]

    修改conf/hbase-site.xml

    <property> <name>hbase.master</name> <value>A:60000</value> </property> <property> <name>hbase.master.maxclockskew</name> #时间同步允许的时间差 <value>180000</value> </property> <property> <name>hbase.rootdir</name> <value>hdfs://A:9000/hbase</value> #hbase共享目录,持久化hbase数据 </property> <property> <name>hbase.cluster.distributed</name> #是否分布式运行,false即为单机 <value>true</value> </property> <property> <name>hbase.zookeeper.quorum</name> #zookeeper地址 <value>A,B,C</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> #zookeeper配置信息快照的位置 <value>/data/hbase/tmp</value> </property>

    然后将hadoop的core-site.xml和hdfs-site.xml也复制到该文件夹下。

    修改环境变量

    $ vim ~/.bash_profile export HBASE_HOME=/home/hadoop/software/hbase export PATH=$HBASE_HOME/bin:$PATH # 使配置生效 $ source /etc/profile

    将修改后的hbase安装包复制到另外两台上去。

    scp -r hbase/ B:/home/hadoop/software/ scp -r hbase/ C:/home/hadoop/software/

    然后在B/C上做相同操作。

    最后在master节点上启动hbase

    start-hbase.sh

    然后jps查看进程

    6788 HRegionServer 4133 SecondaryNameNode 7768 Jps 3672 QuorumPeerMain 3417 QuorumPeerMain 3865 NameNode 3626 QuorumPeerMain 7386 HMaster 3965 DataNode

    最后页面操作显示:http:A:16010

    es/kibana

    参见博文ES基础操作

    kafka分布式集群搭建

    以下为分布式集群搭建,节点分别为:a,b,c三个节点。其中zk是安装在zookeeper用户下的;jdk为kafka用户下。

    首先:kafka集群搭建依赖以下组件:

    jdk>1.7zookeeper. 以上两个部分参看博文

    然后,下载安装

    下载链接为:kafka将下载的kafka_2.10-0.8.2.2.tgz包解压至~/software下,并 tar -zxvf kafka_2.10-0.8.2.2.tgz ln -s kafka_2.10-0.8.2.2 kafka cd kafka/config vim server..properties ###### broker.id=0 #当前机器在集群中的唯一标识,和zookeeper的myid性质一样,另外两台可分别为1,2 port=9092 #当前kafka对外提供服务的端口默认是9092 num.network.threads=3 #这个是borker进行网络处理的线程数 num.io.threads=8 #这个是borker进行I/O处理的线程数 log.dirs=/opt/kafka/kafkalogs/ #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个 socket.send.buffer.bytes=102400 #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能 socket.receive.buffer.bytes=102400 #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘 socket.request.max.bytes=104857600 #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小 num.partitions=1 #默认的分区数,一个topic默认1个分区数 log.retention.hours=168 #默认消息的最大持久化时间,168小时,7天 message.max.byte=5242880 #消息保存的最大值5M default.replication.factor=2 #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务 replica.fetch.max.bytes=5242880 #取消息的最大直接数 log.segment.bytes=1073741824 #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件 log.retention.check.interval.ms=300000 #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除 log.cleaner.enable=false #是否启用log压缩,一般不用启用,启用的话可以提高性能 zookeeper.connect=a:2181,b:2181,c2181 #设置zookeeper的连接端口 #####
    启动

    先启动zk,然后启动kafka

    ./bin/kafka-server-start.sh -daemon ./config/server.properties &

    然后集群的验证等步骤参看博文

    hive

    一、与 Hadoop 类似,Hive 也有 3 种运行模式:

    内嵌模式:

    将元数据保存在本地内嵌的 Derby 数据库中,这是使用 Hive 最简单的方式。但是这种方式缺点也比较明显,因为一个内嵌的 Derby 数据库每次只能访问一个数据文件,这也就意味着它不支持多会话连接。 2. 本地模式

    这种模式是将元数据保存在本地独立的数据库中(一般是 MySQL),这用就可以支持多会话和多用户连接了。

    远程模式

    此模式应用于 Hive 客户端较多的情况。把 MySQL 数据库独立出来,将元数据保存在远端独立的 MySQL 服务中,避免了在每个客户端都安装 MySQL 服务从而造成冗余浪费的情况。

    一、下载安装 Hive

    http://hive.apache.org/downloads.html

    二、配置系统环境变量:

    修改 /etc/profile或者~/.bashrc 文件,使用 vim /etc/profile 或者vim ~/.bashrc来修改: # Hive environment export HIVE_HOME=/usr/local/hadoop/hive export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH

    二、内嵌模式

    (1)修改 Hive 配置文件:hive-env.sh和hive-site.xml

    hive-env.sh

    export HADOOP_HEAPSIZE=1024 # Set HADOOP_HOME to point to a specific hadoop install directory HADOOP_HOME=/usr/local/hadoop # Hive Configuration Directory can be controlled by: export HIVE_CONF_DIR=/usr/local/hadoop/hive/conf # Folder containing extra ibraries required for hive compilation/execution can be controlled by: export HIVE_AUX_JARS_PATH=/usr/local/hadoop/hive/lib

    hive-site.xml

    hive.metastore.warehouse.dir 该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。 hive.exec.scratchdir 该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。

    (2)创建必要目录

    前面我们看到 hive-site.xml 文件中有两个重要的路径,切换到 hadoop 用户下查看 HDFS 是否有这些路径:

    $ hadoop dfs -ls / 没有发现上面提到的路径,因此我们需要自己新建这些目录,并且给它们赋予用户写(W)权限。 $ hadoop dfs -mkdir /user/hive/warehouse $ hadoop dfs -mkdir /tmp/hive $ hadoop dfs -chmod 777 /user/hive/warehouse $ hadoop dfs -chmod 777 /tmp/hive

    (3)修改 io.tmpdir 路径

    同时,要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir} 字段的 value 即路径,你可以自己新建一个目录来替换它,例如 /home/hive/iotmp .

    mkdir /home/hadoop/cloud/apache-hive-2.1.1-bin/iotmp chmod 777 /home/hadoop/cloud/apache-hive-2.1.1-bin/iotmp

    最后再将

    <property> <name>hive.exec.local.scratchdir</name> <value>/home/lch/software/Hive/apache-hive-2.1.1-bin/tmp/${system:user.name}</value> <description>Local scratch space for Hive jobs</description> </property>

    中的${system:user.name}修改如下:

    <property> <name>hive.exec.local.scratchdir</name> <value>/home/lch/software/Hive/apache-hive-2.1.1-bin/tmp/${user.name}</value> <description>Local scratch space for Hive jobs</description> </property>

    (4) 初始化

    ./schematool -initSchema -dbType derby nohup ./hive --service metastore & nohup ./hive --service hiveserver2 &

    运行 Hive

    ./hive

    前面我们已经提到过,内嵌模式使用默认配置和 Derby 数据库,所以无需其它特别修改,先 ./start-all.sh 启动 Hadoop, 然后直接运行 hive:

    四、Thrift 服务

    通过hiveServer/hiveServer2启动Thrift服务,客户端连接Thrift服务访问Hive数据库(JDBC,JAVA等连接Thrift服务访问Hive)。

    <property> <name>hive.server2.thrift.port</name> <value></value> <description>Port number of HiveServer2 Thrift interface when hive.server2.transport.mode is 'binary'.</description> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>127.0.0.1</value> <description>Bind host on which to run the HiveServer2 Thrift service.</description> </property> <property> <name>hive.server2.enable.doAs</name> <value>false</value> <description> Setting this property to true will have HiveServer2 execute Hive operations as the user making the calls to it.     如果为True:Hive Server会以提交用户的身份去执行语句     如果为False:会以hive server daemon的admin user来执行语句 </description> </property>

    启动Thrift服务:hive --service hiveserver2

    测试Thrift服务:

    新开一个命令行窗口,执行beeline命令:

    ./beeline 1 若是内嵌模式则: If hive.server2.authentication is "NONE" in HIVE_HOME/conf/hive-site.xml then connect beeline with below url Connection URL: !connect jdbc:hive2:// 2 Remote Mode: i.)SASL Authentication: If value of "hive.server2.authentication" property in HIVE_HOME/conf/hive-site.xml to be set as "SASL" then connect hive beeline with below url Beeline URL: !connect jdbc:hive2://<host>:<port>/<db> ii.)NOSASL Authentication: If "hive.server2.authentication" is nosasl then connect the beeline like below. Beeline URL: !connect jdbc:hive2://<host>:<port>/<db>;auth =noSasl

    三、本地模式 (选用mySql作为元数据库,将mySql和Hive安装在master服务器上)

    首先用root用户安装mysql: yum install mysql-server

    安装完成后:

    service mysqld start mysql 若不报错则执行下命令: use mysql; update user set password=PASSWORD(“hadoop”)where user=”root”; flush privileges; quit service mysqld restart mysql -u root -p password:hadoop

    到此测表示mysql已经安装成功。 接下来创建用户:

    创建Hive元数据库: mysql>create database hive; alter database hive character set latin1; mysql>grant all privileges on hive.* to 'hive'@'%' identified by 'hive'; <!--mysql>CREATE USER ‘connect’ IDENTIFIED BY ‘connect’; --> <!--mysql>GRANT ALL PRIVILEGES ON connect.* TO ‘connect’@’ip’ WITH GRANT OPTION; --> <!--mysql> GRANT ALL PRIVILEGES ON connect.* TO ‘connect’@’ip’ IDENTIFIED BY ‘connect’; --> mysql>flush privileges;

    二、安装hive

    hive安装的前提是hadoop已经安装完毕。且需要在hdfs上新建/user/hive/metahouse/和/tmp/hive文件夹,并赋予777权限:

    hdfs dfs -mkdir /user/hive/metahouse(只能一级一级的建) hdfs dfs -mkdir /tmp/hive hdfs dfs -chmod 777 /user/hive/warehouse hdfs dfs -chmod 777 /tmp/hive hive.metastore.warehouse.dir 该参数指定了 Hive 的数据存储目录,默认位置在 HDFS 上面的 /user/hive/warehouse 路径下。 hive.exec.scratchdir 该参数指定了 Hive 的数据临时文件目录,默认位置为 HDFS 上面的 /tmp/hive 路径下。 下载hvie:apache-hive-2.2.0-bin.tar.gz 放入/home/connect/install文件夹中 然后解压至/home/connect/software tar -zxvf apache-hive-2.2.0-bin.tar.gz -C /home/connect/software ln -s apache-hive-2.2.0-bin hive

    然后设置环境变量:

    vim ~/.bashrc export HIVE_HOME=/home/connect/software/hive export PATH=$HIVE_HOME/bin:$HIVE_HOME/conf:$PATH source ~/.bashrc 修改配置文件: cp hive-default.xml.template hive-site.xml cp hive-env.sh.template hive-env.sh

    a.修改hive-site.xml

    <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://10.37.167.203:3306/hive_metastore?characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hadoop</value> </property> 修改 io.tmpdir 路径 要修改 hive-site.xml 中所有包含 ${system:java.io.tmpdir} 字段的 value 即路径,可以自己新建一个目录来替换它,例如: /home/connect/hive/bin/iotmp chmod 777 /home/connect/hive/bin/iotmp 把hive-site.xml 中所有包含 ${system:Java.io.tmpdir}替换成/home/hadoop/cloud/apache-hive-2.1.1-bin/iotmp 拷贝JDBC驱动包

    将mySql的JDBC驱动包复制到Hive的lib目录下

    cp mysql-connector-java.bin.jar /home/connect/hive/lib

    6、分发Hive分别到slave1,slave2,slave3上

    scp -r /usr/local/hadoop/apache-hive-1.2.1-bin slave1:/usr/local/hadoop/ scp -r /usr/local/hadoop/apache-hive-1.2.1-bin slave2:/usr/local/hadoop/ scp -r /usr/local/hadoop/apache-hive-1.2.1-bin slave3:/usr/local/hadoop/

    环境变量等如同master

    7、测试Hive 进入到Hive的安装目录,命令行: cd /usr/local/hadoop/apache-hive-1.2.1-bin/bin hive hive>show tables; 正常显示,即是安装配置成功。

    初始化

    schematool -dbType mysql -initSchema

    参考及后续有用博文

    https://www.cnblogs.com/tq03/p/5107949.html

    https://www.cnblogs.com/netuml/p/7841387.html

    http://www.cnblogs.com/zlslch/p/6025410.html

    https://www.cnblogs.com/yaohaitao/p/6588922.html

    spark

    参见博文spark安装测试

    druid

    storm

    kafka connect

    redis

    flume

    flume安装使用特别简单,新建用户赋权,然后下载安装包。flume-1.7

    解压至software文件夹;修改flume的conf/flume-env.sh中的JAVA_HOME值。 3.验证是否安装成功:bin/flume-ng version

    hive

    未完,待续。。。


    最新回复(0)