HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqool、Flume-ng、storm、kafka、redis、mongodb、spark安装

东方淇
2023-12-01
HDFS HA、YARN HA、Zookeeper、HBase HA、Mysql、Hive、Sqool、Flume-ng、storm、kafka、redis、mongodb、spark
0、集群规划
    主机名        IP        安装的软件            运行的进程
    hadoop01    192.168.1.201    jdk、hadoop            NameNode、DFSZKFailoverController(zkfc)、ResourceManager
    hadoop02    192.168.1.202    jdk、hadoop            NameNode、DFSZKFailoverController(zkfc)、(ResourceManager)
    hadoop03    192.168.1.203    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    hadoop04    192.168.1.204    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain
    hadoop05    192.168.1.205    jdk、hadoop、zookeeper        DataNode、NodeManager、JournalNode、QuorumPeerMain

1、安装虚拟机
    centOS6.5mini安装
    界面选择:Install or upgrade an existing system
    界面选择:SKIP
    界面选择:basic storage devices
    界面选择:yes,discard any data
    界面选择:hostname
    界面选择:configure network
    界面选择:勾选connect automatically
    界面选择:IPv4 setting并配置IP
    界面选择:manual
    界面选择:去掉system clock users UTC
    界面选择:勾选user all space
    界面选择:勾选write changes to disk
    root 登录,添加用户和密码
    #useradd hadoop
    #passwd hadoop
    查看网络配置 使ONBOOT=yes
    #more /etc/sysconfig/network-scripts/ifcfg-eth0
    
            DEVICE="eth0"
            BOOTPROTO="static"           ###
            HWADDR="00:0C:29:3C:BF:E7"
            IPV6INIT="yes"
            NM_CONTROLLED="yes"
            ONBOOT="yes"
            TYPE="Ethernet"
            UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
            IPADDR="192.168.1.44"       ###
            NETMASK="255.255.255.0"      ###
            GATEWAY="192.168.1.1"        ###
    #service network restart
    克隆网络问题
    1、修改 /etc/udev/rules.d/70-persistent-net.rules 文件,删除掉 关于 eth0 的信息。修改 第二条 eth1 的网卡的名字为 eth0.
    2、修改文件/etc/udev/rules.d/70-persistent-net.rules中的MAC地址和/etc/sysconfig/network-scripts/ifcfg-eth0中的MAC地址要与虚拟机网卡的MAC地址相对应。

    #自动选择最快的源
    #yum -y install yum-fastestmirror

    #升级系统
    #yum update

    #安装wget
    #yum -y install wget

2、基础配置
    修改三台节点主机名
    [root@hadoop1 ~]#hostname hadoop1      (5台机子)
    [root@hadoop1 ~]#vi /etc/sysconfig/network   
            HOSTNAME=hadoop1    2      3    4    5 (5台机子)
    
    添加用户
    useradd hadoop             (5台机子均hadoop)
    
    添加hosts 记录
    vi /etc/hosts       (5台机子)         
    192.168.1.201 hadoop01
    192.168.1.201 hadoop02
    192.168.1.201 hadoop03
    192.168.1.201 hadoop04
    192.168.1.201 hadoop05
    完成以上重启系统

    配置免密码登陆
    #HDFS首先要配置hadoop01到hadoop02、hadoop03、hadoop04、hadoop05的免密码登陆
    #在hadoop01上生产一对钥匙
    Hadoop下执行    cd       
    ssh-keygen -t rsa                 
    #在hadoop01上生产一对钥匙
    ssh-keygen -t rsa
    #将公钥拷贝到其他节点,包括自己
    ssh-coyp-id hadoop01
    ssh-coyp-id hadoop02
    ssh-coyp-id hadoop03
    ssh-coyp-id hadoop04
    ssh-coyp-id hadoop05
    #YARN配置hadoop01到hadoop04、hadoop05、hadoop06、hadoop07的免密码登陆(HDFS已配)
    #在hadoop01上生产一对钥匙
    ssh-keygen -t rsa
    #将公钥拷贝到其他节点
    ssh-coyp-id hadoop03
    ssh-coyp-id hadoop04
    ssh-coyp-id hadoop05
    #注意:两个namenode之间要配置ssh免密码登陆,别忘了配置hadoop02到hadoop01的免登陆
    在hadoop02上生产一对钥匙
    ssh-keygen -t rsa
    ssh-coyp-id -i hadoop01    
    
    查找已安装的Java  $su –root    
    #rpm –qa|grep jdk   

    #yum install rsync       远程同步         
    安装 #yum install lrzsz                                                          
        下载 #sz file      上传 #rz -y      
 
    解压jdk     #tar -zxvf jdk1.7.0_79        
     移至  #mv jdk1.7.0_79 /usr/           
    #chmod 777 -R  jdk1.7.0_79        
    添加环境变量 #vi /etc/profile   
    ##java
    export JAVA_HOME=/usr/jdk1.7.0_79
    export CLASSPATH=:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
    重新加载
        #source /etc/profile      
         # java -version    
    #java   
    传入其他节点  #scp /usr/jdk1.7.0_79 hadoop@hadoop1:/usr  

    关闭防火墙
    Root 下  #chkconfig iptables off  
    查看   #chkconfig|grep ipt  
    修改文件 #vi /etc/selinux/config       
    SELINUX=disabled    重启系统  (立刻关闭:  service iptables status/stop)

    关闭图形界面
    #init 3
    #vi /etc/inittab
    id:3:initdefault

    添加sudo
    #vi /etc/sudoers 添加
    hadoop ALL=(ALL) ALL        

3、安装配置zooekeeper集群(在hadoop01上)
    3.1解压
    tar -zxvf zookeeper-3.4.5.tar.gz -C /mytest/
    
    3.2修改配置
    cd /mytest/zookeeper-3.4.5/conf/
    cp zoo_sample.cfg zoo.cfg
    vim zoo.cfg
    修改:dataDir=/mytest/zookeeper-3.4.5/tmp
    在最后添加:
    server.1=hadoop03:2888:3888
    server.2=hadoop04:2888:3888
    server.3=hadoop05:2888:3888
    保存退出
        
    然后创建一个tmp文件夹
    mkdir /mytest/zookeeper-3.4.5/tmp
    再创建一个空文件
    touch /mytest/zookeeper-3.4.5/tmp/myid
    最后向该文件写入ID
    echo 1 > /mytest/zookeeper-3.4.5/tmp/myid
        
    3.3将配置好的zookeeper拷贝到其他节点(首先分别在hadoop04、hadoop05根目录下创建一个mytest目录:mkdir /mytest)
    scp -r /mytest/zookeeper-3.4.5/ hadoop04:/mytest/
    scp -r /mytest/zookeeper-3.4.5/ hadoop05:/mytest/
        
    注意:修改hadoop04、hadoop05对应/mytest/zookeeper-3.4.5/tmp/myid内容
    hadoop04:
        echo 2 > /mytest/zookeeper-3.4.5/tmp/myid
    hadoop05:
        echo 3 > /mytest/zookeeper-3.4.5/tmp/myid

4、安装配置hadoop集群(在hadoop01上操作)
    4.1解压
    tar -zxvf hadoop-2.6.0.tar.gz -C /mytest/
        
    4.2配置HDFS
    
    #hadoop2.0的配置文件全部在$HADOOP_HOME/etc/hadoop下
    cd /mytest/hadoop-2.6.0/etc/hadoop
            
    4.2.1修改hadoo-env.sh
    export JAVA_HOME=/usr/jdk1.7.0_79
                
    4.2.2修改core-site.xml
        <configuration>
            <!-- 指定hdfs的nameservice为ns1 -->
            <property>
                <name>fs.defaultFS</name>
                <value>hdfs://ns1</value>
            </property>
            <!-- 指定hadoop临时目录 -->
            <property>
                <name>hadoop.tmp.dir</name>
                <value>/mytest/hadoop-2.6.0/tmp</value>
            </property>
            <!-- 指定zookeeper地址 -->
            <property>
                <name>ha.zookeeper.quorum</name>
                <value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
            </property>
        </configuration>
                
    4.2.3修改hdfs-site.xml
        <configuration>
            <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
            <property>
                <name>dfs.nameservices</name>
                <value>ns1</value>
            </property>
            <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
            <property>
                <name>dfs.ha.namenodes.ns1</name>
                <value>nn1,nn2</value>
            </property>
            <!-- nn1的RPC通信地址 -->
            <property>
                <name>dfs.namenode.rpc-address.ns1.nn1</name>
                <value>hadoop01:9000</value>
            </property>
            <!-- nn1的http通信地址 -->
            <property>
                <name>dfs.namenode.http-address.ns1.nn1</name>
                <value>hadoop01:50070</value>
            </property>
            <!-- nn2的RPC通信地址 -->
            <property>
                <name>dfs.namenode.rpc-address.ns1.nn2</name>
                <value>hadoop02:9000</value>
            </property>
            <!-- nn2的http通信地址 -->
            <property>
                <name>dfs.namenode.http-address.ns1.nn2</name>
                <value>hadoop02:50070</value>
            </property>
            <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
            <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop03:8485;hadoop04:8485;hadoop05:8485/ns1</value>
            </property>
            <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
            <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/mytest/hadoop-2.6.0/journal</value>
            </property>
            <!-- 开启NameNode失败自动切换 -->
            <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
            </property>
            <!-- 配置失败自动切换实现方式 -->
            <property>
                <name>dfs.client.failover.proxy.provider.ns1</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
            </property>
            <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
            <property>
                <name>dfs.ha.fencing.methods</name>
                <value>
                    sshfence
                    shell(/bin/true)
                </value>
            </property>
            <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
            <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/hadoop/.ssh/id_rsa</value>
            </property>
            <!-- 配置sshfence隔离机制超时时间 -->
            <property>
                <name>dfs.ha.fencing.ssh.connect-timeout</name>
                <value>30000</value>
            </property>
        </configuration>
            
    4.2.4修改mapred-site.xml
        <configuration>
            <!-- 指定mr框架为yarn方式 -->
            <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
            </property>
        </configuration>    
            
    4.2.5修改yarn-site.xml
        <configuration>
            <!-- 开启RM高可靠 -->
            <property>
               <name>yarn.resourcemanager.ha.enabled</name>
               <value>true</value>
            </property>
            <!-- 指定RM的cluster id -->
            <property>
                <name>yarn.resourcemanager.cluster-id</name>
                 <value>yrc</value>
            </property>
            <!-- 指定RM的名字 -->
            <property>
                <name>yarn.resourcemanager.ha.rm-ids</name>
                <value>rm1,rm2</value>
            </property>
            <!-- 分别指定RM的地址 -->
            <property>
                <name>yarn.resourcemanager.hostname.rm1</name>
                <value>hadoop01</value>
            </property>
            <property>
                <name>yarn.resourcemanager.hostname.rm2</name>
                <value>hadoop02</value>
            </property>
            <!-- 指定zk集群地址 -->
                <property>
                <name>yarn.resourcemanager.zk-address</name>
                <value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
            </property>
            <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
            </property>
        </configuration>
                    
    4.2.6修改slaves(slaves是指定子节点的位置,因为要在hadoop01上启动HDFS、在hadoop01启动yarn,所以hadoop01上的slaves文件指定的是datanode的位置,hadoopt01上的slaves文件指定的是nodemanager的位置)
        mytest03
        mytest04
        hadoop05
    #将hadoop添加到环境变量中
    vim /etc/profile
    ##hadoop
    export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
    #export JAVA_LIBRARY_PATH=$JAVA_LIBRARY_PATH:$HADOOP_HOME/lib/native
    export HADOOP_COMMON_HOME=$HADOOP_HOME
    export HADOOP_HDFS_HOME=$HADOOP_HOME
    export HADOOP_MAPRED_HOME=$HADOOP_HOME
    export HADOOP_YARN_HOME=$HADOOP_HOME
    export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
    export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
            
    4.4将配置好的hadoop拷贝到其他节点
        scp -r /mytest/ hadoop02:/
        scp -r /mytest/ hadoop03:/
        scp -r /mytest/hadoop-2.6.0/ root@hadoop04:/mytest/
        scp -r /mytest/hadoop-2.6.0/ root@hadoop05:/mytest/
        同步profile
5、启动和验证
        
    ###注意:严格按照下面的步骤
    5.1启动zookeeper集群(分别在hadoop03、hadoop04、hadoop05上启动zk)
        cd /mytest/zookeeper-3.4.5/bin/
        ./zkServer.sh start
        #查看状态:一个leader,两个follower
        ./zkServer.sh status
            
    5.2启动journalnode(分别在在hadoop03、hadoop04、hadoop05上执行)
        cd /mytest/hadoop-2.6.0
        sbin/hadoop-daemon.sh start journalnode
        #运行jps命令检验,hadoop03、hadoop04、hadoop05上多了JournalNode进程
        
    5.3格式化HDFS
        #在hadoop01上执行命令:
        hdfs namenode -format
        #格式化后会在根据core-site.xml中的hadoop.tmp.dir配置生成个文件,这里我配置的是/mytest/hadoop-2.6.0/tmp,然后将/mytest/hadoop-2.6.0/tmp拷贝到hadoop02的/mytest/hadoop-2.6.0/下。
        scp -r tmp/ hadoop02:/mytest/hadoop-2.6.0/
        ##也可以这样,建议hdfs namenode -bootstrapStandby

    5.4格式化ZK(在hadoop01上执行即可)
        hdfs zkfc -formatZK
        
    5.5启动HDFS(在hadoop01上执行)
        sbin/start-dfs.sh

    5.6启动YARN(#####注意#####:是在hadoop01上执行start-yarn.sh,把namenode和resourcemanager分开是因为性能问题,因为他们占资源,所以把他们分开了,要分别启动)
        01#sbin/start-yarn.sh
        02#sbin/yarn-deamon.sh start resourcemanager

        
    到此,hadoop-2.6.0配置完毕,可以统计浏览器访问:
        http://192.168.1.201:50070
        NameNode 'hadoop01:9000' (active)
        http://192.168.1.202:50070
        NameNode 'hadoop02:9000' (standby)
    
    5.7验证HDFS HA
        首先向hdfs上传一个文件
        hadoop fs -put /etc/profile /profile
        hadoop fs -ls /
        然后再kill掉active的NameNode
        kill -9 <pid of NN>
        通过浏览器访问:http://192.168.1.202:50070
        NameNode 'hadoop02:9000' (active)
        这个时候hadoop02上的NameNode变成了active
        在执行命令:
        hadoop fs -ls /
        -rw-r--r--   3 root supergroup       1926 2014-02-06 15:36 /profile
        刚才上传的文件依然存在!!!
        手动启动那个挂掉的NameNode
        sbin/hadoop-daemon.sh start namenode
        通过浏览器访问:http://192.168.1.201:50070
        NameNode 'hadoopt01:9000' (standby)
    
    验证YARN:
        运行一下hadoop提供的demo中的WordCount程序:
        hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount /profile /out

6、安装HBase
    6.1.上传hbase安装包
        #rz -y
    6.2.解压

    6.3.配置hbase集群,要修改3个文件(首先zk集群已经安装好了)
    注意:要把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下
    
    6.3.1修改hbase-env.sh
        export JAVA_HOME=/usr/java/jdk1.7.0_79
        //告诉hbase使用外部的zk
        export HBASE_MANAGES_ZK=false
    
         vim hbase-site.xml
        <configuration>
            <!-- 指定hbase在HDFS上存储的路径 -->
                <property>
                        <name>hbase.rootdir</name>
                        <value>hdfs://ns1/hbase</value>
                </property>
            <!-- 指定hbase是分布式的 -->
                <property>
                        <name>hbase.cluster.distributed</name>
                        <value>true</value>
                </property>
            <!-- 指定zk的地址,多个用“,”分割 -->
                <property>
                        <name>hbase.zookeeper.quorum</name>
                        <value>hadoop03:2181,hadoop04:2181,hadoop05:2181</value>
                </property>
        </configuration>
    
    vim regionservers
    hadoop03
    hadoop04
    hadoop05
    
    6.3.2拷贝hbase到其他节点
        scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop02:/mytest/
        scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop03:/mytest/
        scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop04:/mytest/
        scp -r /mytest/hbase-0.96.2-hadoop2/ hadoop05:/mytest/
    6.4.将配置好的HBase拷贝到每一个节点并同步时间。

    6.5.启动所有的hbase(hadoop01上)
        分别启动zk
            ./zkServer.sh start
        启动hbase集群
            start-dfs.sh
        启动hbase,在主节点上运行:
            start-hbase.sh
    6.6.通过浏览器访问hbase管理页面
        192.168.1.201:60010
    6.7.为保证集群的可靠性,要启动多个HMaster(hadoop02上)
        hbase-daemon.sh start master

7、Mysql、Hive安装
    7.1.上传tar包

    7.2.解压
    tar -zxvf hive-0.9.0.tar.gz -C /cloud/
    7.3.配置mysql metastore(切换到root用户)
    配置HIVE_HOME环境变量
    rpm -qa | grep mysql
    rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
    rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm
    rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm
    修改mysql的密码
    /usr/bin/mysql_secure_installation
    (注意:删除匿名用户,允许用户远程连接)
    登陆mysql
    mysql -u root -p

    7.4.配置hive
    cp hive-default.xml.template hive-site.xml
    修改hive-site.xml(删除所有内容,只留一个<property></property>)
    添加如下内容:
    <property>
      <name>javax.jdo.option.ConnectionURL</name>
      <value>jdbc:mysql://hadoop01:3306/hive?createDatabaseIfNotExist=true</value>
      <description>JDBC connect string for a JDBC metastore</description>
    </property>
    <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>root</value>
      <description>username to use against metastore database</description>
    </property>
    <property>
      <name>javax.jdo.option.ConnectionPassword</name>
      <value>root</value>
      <description>password to use against metastore database</description>
    </property>
    
    7.5.安装hive和mysq完成后,将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下
    如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
    mysql -uroot -p
    #(执行下面的语句  *.*:所有库下的所有表   %:任何IP地址或主机都可以连接)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    7.6.建表(默认是内部表)
    create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
    建分区表
    create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
    建外部表
    create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';

    7.7.创建分区表
    普通表和分区表区别:有大量数据增加的需要建分区表
    create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t';

    分区表加载数据
    load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');
    
    load data local inpath '/root/data.am' into table beauty partition (nation="USA");

    select nation, avg(size) from beauties group by nation order by avg(size);

8、Sqool安装
    1.上传sqoop

    2.安装和配置
    ----修改配置文件  sqoop-env.sh
    #Set path to where bin/hadoop is available
    export HADOOP_COMMON_HOME=/home/hadoop/app/hadoop-2.4.1

    #Set path to where hadoop-*-core.jar is available
    export HADOOP_MAPRED_HOME=/home/hadoop/app/hadoop-2.4.1

    #set the path to where bin/hbase is available
    export HBASE_HOME=/home/hadoop/app/hbase-0.96.2-hadoop2

    #Set the path to where bin/hive is available
    export HIVE_HOME=/home/hadoop/app/hive-0.12.0-bin

    #Set the path for where zookeper config dir is
    export ZOOCFGDIR=/home/hadoop/app/zookeeper-3.4.5/conf

    在添加sqoop到环境变量
    
######将数据库连接驱动拷贝到$SQOOP_HOME/lib里

    3.使用
    第一类:数据库中的数据导入到HDFS上
        sqoop import
        --connect jdbc:mysql://192.168.1.10:3306/itcast
        --username root --password 123  
        --table trade_detail
        --columns 'id, account, income, expenses'
        
        指定输出路径、指定数据分隔符
        sqoop import
        --connect jdbc:mysql://192.168.1.10:3306/itcast
        --username root --password 123  
        ##要导入数据的表
        --table trade_detail
        ##数据导入hdfs后所存放的目录
        --target-dir '/sqoop/td'
        ##导入的数据字段之间的分隔符
        --fields-terminated-by '\t'
        
        指定Map数量 -m
        sqoop import
        --connect jdbc:mysql://192.168.1.10:3306/itcast
        --username root --password 123  
        --table trade_detail
        --target-dir '/sqoop/td1'
        --fields-terminated-by '\t'
        ##指定做导入处理时的map 任务数
        -m 2

        增加where条件, 注意:条件必须用引号引起来
        sqoop import
        --connect jdbc:mysql://192.168.1.10:3306/itcast
        --username root --password 123  
        --table trade_detail
        --where 'id>3'
        --target-dir '/sqoop/td2'

        增加query语句(使用 \ 将语句换行)
        sqoop import
        --connect jdbc:mysql://192.168.1.10:3306/itcast
        --username root --password 123
        --query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS'
        --split-by trade_detail.id
        --target-dir '/sqoop/td3'
        
        注意:如果使用--query这个命令的时候,需要注意的是where后面的参数,AND $CONDITIONS这个参数必须加上
        而且存在单引号与双引号的区别,如果--query后面使用的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS
        如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上
        
    第二类:将HDFS上的文件数据导出到数据库的表里面去
        sqoop export
        --connect jdbc:mysql://192.168.8.120:3306/itcast
        --username root --password 123
        ##你要导出的数据所在的目录
        --export-dir '/td3'
        ##你要导往的目标关系表
        --table td_bak
        -m 1
        ##你要导出的文件的字段分隔符
        --fields-termianted-by '\t'
    
    4.配置mysql远程连接
    GRANT ALL PRIVILEGES ON itcast.* TO 'root'@'192.168.1.201' IDENTIFIED BY '123' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
    FLUSH PRIVILEGES

9、Flume-ng安装

    文件a.conf
    #定义agent名, source、channel、sink的名称
    a4.sources = r1
    a4.channels = c1
    a4.sinks = k1

    #具体定义source
    a4.sources.r1.type = spooldir
    a4.sources.r1.spoolDir = /home/hadoop/logs

    #具体定义channel
    a4.channels.c1.type = memory
    a4.channels.c1.capacity = 10000
    a4.channels.c1.transactionCapacity = 100

    #定义拦截器,为消息添加时间戳
    a4.sources.r1.interceptors = i1
    a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder

    #具体定义sink
    a4.sinks.k1.type = hdfs
    a4.sinks.k1.hdfs.path = hdfs://ns1/flume/%Y%m%d
    a4.sinks.k1.hdfs.filePrefix = events-
    a4.sinks.k1.hdfs.fileType = DataStream
    #不按照条数生成文件
    a4.sinks.k1.hdfs.rollCount = 0
    #HDFS上的文件达到128M时生成一个文件
    a4.sinks.k1.hdfs.rollSize = 134217728
    #HDFS上的文件达到60秒生成一个文件
    a4.sinks.k1.hdfs.rollInterval = 60

    #组装source、channel、sink
    a4.sources.r1.channels = c1
    a4.sinks.k1.channel = c1


10 kafka安装
    集群安装
    1、解压
    2、修改server.properties
    broker.id=1
    zookeeper.connect=hadoop03:2181,hadoop04:2181,hadoop05:2181

    3、将zookeeper集群启动

    4、在每一台节点上启动broker
    bin/kafka-server-start.sh config/server.properties

    5、在kafka集群中创建一个topic
    bin/kafka-topics.sh --create --zookeeper hadoop03:2181 --replication-factor 3 --partitions 1 --topic order

    6、用一个producer向某一个topic中写入消息
    bin/kafka-console-producer.sh --broker-list hadoop:9092 --topic order

    7、用一个comsumer从某一个topic中读取信息
    bin/kafka-console-consumer.sh --zookeeper hadoop03:2181 --from-beginning --topic order

    8、查看一个topic的分区及副本状态信息
    bin/kafka-topics.sh --describe --zookeeper hadoop03:2181 --topic order

    flume和kafka整合:
    1.下载
    flume-kafka-plus:https://github.com/beyondj2ee/flumeng-kafka-plugin

    2.提取插件中的flume-conf.properties文件
    修改该文件:#source section
    producer.sources.s.type = exec
    producer.sources.s.command = tail -f -n+1 /mnt/hgfs/vmshare/test.log
    producer.sources.s.channels = c
    修改所有topic的值改为test
    将改后的配置文件放进flume/conf目录下
    在该项目中提取以下jar包放入环境中flume的lib下:

    注:这里的flumeng-kafka-plugin.jar这个包,后面在github项目中已经移动到package目录了。找不到的童鞋可以到package目录获取。
    完成上面的步骤之后,我们来测试下flume+kafka这个流程有没有走通;
    我们先启动flume,然后再启动kafka,启动步骤按之前的步骤执行;接下来我们使用kafka的kafka-console-consumer.sh脚本查看是否有flume有没有往Kafka传输数据;
    $bin/kafka-consumer.sh --zookeeper nutch1:2181 --topic test --from-beginning

11 storm安装
    1、安装一个zookeeper集群
    2、上传storm的安装包,解压
    3、修改配置文件storm.yaml
    #所使用的zookeeper集群主机
    storm.zookeeper.servers:
         - "hadoop03"
         - "hadoop04"
         - "hadoop05"

    #nimbus所在的主机名
    nimbus.host: "hadoop03"

    #默认是前4个
    supervisor.slots.ports
    -6701
    -6702
    -6703
    -6704
    -6705

    启动storm
    在nimbus主机上
    nohup ./storm nimbus 1>/dev/null 2>&1 &
    nohup ./storm ui 1>/dev/null 2>&1 &

    在supervisor主机上
    nohup ./storm supervisor 1>/dev/null 2>&1 &

    kafka和storm的整合
    1.下载kafka-storm0.8插件:https://github.com/wurstmeister/storm-kafka-0.8-plus
    2.使用maven package进行编译,得到storm-kafka-0.8-plus-0.3.0-SNAPSHOT.jar包  --有转载的童鞋注意下,这里的包名之前写错了,现在改正确了!不好意思!
    3.将该jar包及kafka_2.9.2-0.8.0-beta1.jar、metrics-core-2.2.0.jar、scala-library-2.9.2.jar (这三个jar包在kafka项目中能找到)
    备注:如果开发的项目需要其他jar,记得也要放进storm的Lib中比如用到了mysql就要添加mysql-connector-java-5.1.22-bin.jar到storm的lib下
    那么接下来我们把storm也重启下;
    完成以上步骤之后,我们还有一件事情要做,就是使用kafka-storm0.8插件,写一个自己的Storm程序;
    

12、redis
    1:官方站点: redis.io 下载最新版或者最新stable版
    2:解压源码并进入目录
    3: 不用configure
    4: 直接make
    (如果是32位机器 make 32bit)

    注:易碰到的问题,时间错误.
    原因: 源码是官方configure过的,但官方configure时,生成的文件有时间戳信息,
    Make只能发生在configure之后,
    如果你的虚拟机的时间不对,比如说是2012年
    解决: date -s ‘yyyy-mm-dd hh:mm:ss’   重写时间
        再 clock -w  写入cmos

    5: 可选步骤: make test  测试编译情况
    (可能出现: need tcl  >8.4这种情况, yum install tcl)

    6: 安装到指定的目录,比如 /usr/local/redis
    make  PREFIX=/usr/local/redis install
    注: PREFIX要大写

    7: make install之后,得到如下几个文件
    redis-benchmark  性能测试工具
    redis-check-aof  日志文件检测工(比如断电造成日志损坏,可以检测并修复)
    redis-check-dump  快照文件检测工具,效果类上
    redis-cli  客户端
    redis-server 服务端
    
    8: 复制配置文件
    Cp /path/redis.conf /usr/local/redis

    9: 启动与连接
    /path/to/redis/bin/redis-server  ./path/to/conf-file
    例:[root@localhost redis]# ./bin/redis-server ./redis.conf

    连接: 用redis-cli
    #/path/to/redis/bin/redis-cli [-h localhost -p 6379 ]

    10: 让redis以后台进程的形式运行
    编辑conf配置文件,修改如下内容;
    daemonize yes

13、mongodb
     1.下载安装包
    wget http://fastdl.mongodb.org/linux/mongodb-linux-i686-1.8.2.tgz
    下载完成后解压缩压缩包
    tar zxf mongodb-linux-i686-1.8.2.tgz
    
    2. 安装准备
    将mongodb移动到/usr/local/server/mongdb文件夹
    mv mongodb-linux-i686-1.8.2 /usr/local/mongodb
    
    创建数据库文件夹与日志文件
    mkdir /usr/local/mongodb/data
    touch /usr/local/mongodb/logs
    
    3. 设置开机自启动
    将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
    echo "/usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data –logpath=/usr/local/server/mongodb/logs –logappend  --auth –port=27017" >> /etc/rc.local
    
    4. 启动mongodb
    cd到mongodb目录下的bin文件夹启动mongodb
    //下面这个是需要权限的登录方式, 用户连接需要用户名和密码
    /usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend  --auth  --port=27017 --fork

    //这个是不需要密码的
    /usr/local/server/mongodb/bin/mongod --dbpath=/usr/local/server/mongodb/data --logpath=/usr/local/server/mongodb/logs --logappend  --port=27017 --fork


    5. 参数解释: --dbpath 数据库路径(数据文件)
    --logpath 日志文件路径
    --master 指定为主机器
    --slave 指定为从机器
    --source 指定主机器的IP地址
    --pologSize 指定日志文件大小不超过64M.因为resync是非常操作量大且耗时,最好通过设置一个足够大的oplogSize来避免resync(默认的 oplog大小是空闲磁盘大小的5%)。
    --logappend 日志文件末尾添加
    --port 启用端口号
    --fork 在后台运行
    --only 指定只复制哪一个数据库
    --slavedelay 指从复制检测的时间间隔
    --auth 是否需要验证权限登录(用户名和密码)


    -h [ --help ]             show this usage information
    --version                 show version information
    -f [ --config ] arg       configuration file specifying additional options
    --port arg                specify port number
    --bind_ip arg             local ip address to bind listener - all local ips
                   bound by default
    -v [ --verbose ]          be more verbose (include multiple times for more
                   verbosity e.g. -vvvvv)
    --dbpath arg (=/data/db/) directory for datafiles    指定数据存放目录
    --quiet                   quieter output   静默模式
    --logpath arg             file to send all output to instead of stdout   指定日志存放目录
    --logappend               appnd to logpath instead of over-writing 指定日志是以追加还是以覆盖的方式写入日志文件
    --fork                    fork server process   以创建子进程的方式运行
    --cpu                     periodically show cpu and iowait utilization 周期性的显示cpu和io的使用情况
    --noauth                  run without security 无认证模式运行
    --auth                    run with security 认证模式运行
    --objcheck                inspect client data for validity on receipt 检查客户端输入数据的有效性检查
    --quota                   enable db quota management   开始数据库配额的管理
    --quotaFiles arg          number of files allower per db, requires --quota 规定每个数据库允许的文件数
    --appsrvpath arg          root directory for the babble app server
    --nocursors               diagnostic/debugging option 调试诊断选项
    --nohints                 ignore query hints 忽略查询命中率
    --nohttpinterface         disable http interface 关闭http接口,默认是28017
    --noscripting             disable scripting engine 关闭脚本引擎
    --noprealloc              disable data file preallocation 关闭数据库文件大小预分配
    --smallfiles              use a smaller default file size 使用较小的默认文件大小
    --nssize arg (=16)        .ns file size (in MB) for new databases 新数据库ns文件的默认大小
    --diaglog arg             0=off 1=W 2=R 3=both 7=W+some reads 提供的方式,是只读,只写,还是读写都行,还是主要写+部分的读模式
    --sysinfo                 print some diagnostic system information 打印系统诊断信息
    --upgrade                 upgrade db if needed 如果需要就更新数据库
    --repair                  run repair on all dbs 修复所有的数据库
    --notablescan             do not allow table scans 不运行表扫描
    --syncdelay arg (=60)     seconds between disk syncs (0 for never) 系统同步刷新磁盘的时间,默认是60s

    Replication options:
    --master              master mode 主复制模式
    --slave               slave mode 从复制模式
    --source arg          when slave: specify master as <server:port> 当为从时,指定主的地址和端口
    --only arg            when slave: specify a single database to replicate 当为从时,指定需要从主复制的单一库
    --pairwith arg        address of server to pair with
    --arbiter arg         address of arbiter server 仲裁服务器,在主主中和pair中用到
    --autoresync          automatically resync if slave data is stale 自动同步从的数据
    --oplogSize arg       size limit (in MB) for op log 指定操作日志的大小
    --opIdMem arg         size limit (in bytes) for in memory storage of op ids指定存储操作日志的内存大小

    Sharding options:
    --configsvr           declare this is a config db of a cluster 指定shard中的配置服务器
    --shardsvr            declare this is a shard db of a cluster 指定shard服务器
    
    6. 进入数据库的CLI管理界面
    cd到mongodb目录下的bin文件夹,执行命令./mongo
    运行如下:
    [root@namenode mongodb]# ./bin/mongo
    MongoDB shell version: 1.8.2
    connecting to: test
    > use test;
    switched to db test

14、spark
    5.1 解压
    root@Master:/tools# tar -zxf spark-1.6.0-bin-hadoop2.6.tgz -C /usr/local/spark/
    root@Master:/tools# cd /usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf/
    root@Master:/tools# tar -xzvf scala-2.10.6.tgz
    
    5.2 修改配置文件

    5.2.1修改spark-env.sh
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6#mv spark-env.sh.template spark-env.sh
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6# vim spark-env.sh
    在最后添加以下内容
    export JAVA_HOME=/usr/local/jdk/jdk1.8.0_60
    export SCALA_HOME=/usr/local/scala/scala-2.10.4
    export HADOOP_HOME=/usr/local/hadoop/hadoop-2.6.0
    export HADOOP_CONF_DIR=/usr/local/hadoop/hadoop-2.6.0/etc/hadoop
    export SPARK_MASTER_IP=Master
    #export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=Master:2181,Worker1:2181,Worker2:2
    181 -Dspark.deploy.zookeeper.dir=/spark"
    export SPARK_WORKER_MEMORY=1g
    export SPARK_EXECUTOR_MEMORY=1g
    export SPARK_DRIVER_MEMORY=1G
    export SPARK_WORKER_CORES=2

    5.2.2 修改 slaves
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf#mv slaves.template slaves
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vim slaves
    Worker1
    Worker2
    Worker3
    Worker4

    5.2.3 修改 spark-defaults.conf
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf#mv spark-defaults.conf.template spark-defaults.conf
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vim spark-defaults.conf
    spark.executor.extraJavaOptions         -XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three"
    spark.eventLog.enabled                  true
    spark.eventLog.dir                      hdfs://Master:9000/historyServerforSpark
    spark.yarn.historyServer.address        Master:18080
    spark.history.fs.logDirectory           hdfs://Master:9000/historyServerforSpark

    ============================ SetUp Spark=============================
    Configuration
        spark-env.sh
            HADOOP_CONF_DIR=/opt/data02/hadoop-2.6.0-cdh5.4.0/etc/hadoop
            JAVA_HOME=/opt/modules/jdk1.7.0_67
            SCALA_HOME=/opt/modules/scala-2.10.4
            #######################################################
            SPARK_MASTER_IP=hadoop-spark.dragon.org
            SPARK_MASTER_PORT=7077
            SPARK_MASTER_WEBUI_PORT=8080
            SPARK_WORKER_CORES=1
            SPARK_WORKER_MEMORY=1000m
            SPARK_WORKER_PORT=7078
            SPARK_WORKER_WEBUI_PORT=8081
            SPARK_WORKER_INSTANCES=1
        slaves
            hadoop-spark.dragon.org
        spark-defaults.conf
            spark.master                     spark://hadoop-spark.dragon.org:7077
    Start Spark
        Start Master
            sbin/start-master.sh
        Start Slaves
            sbin/start-slaves.sh
        WEB UI
            http://hadoop-spark.dragon.org:8080

    ============================ Test Spark=============================
    scala> val rdd=sc.textFile("hdfs://hadoop-spark.dragon.org:8020/user/hadoop/data/wc.input")
    scala> rdd.cache()
    scala> val wordcount=rdd.flatMap(_.split(" ")).map(x=>(x,1)).reduceByKey(_+_)
    scala> wordcount.take(10)
    scala> val wordsort=wordcount.map(x=>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
    scala> wordsort.take(10)

    5.6 一键分发到各个服务器上去
    root@Master:~# vim fenfa.sh
    #!/bin/sh
    for i in 1 2 3 4
    do
    #scp -rq /usr/local/hadoop/ root@Worker$i:/usr/local/
    scp -rq /usr/local/spark/ root@Worker$i:/usr/local/
    done

    root@Master:~# sh fenfa.sh

    5.7.需要到hdfs 系统上创建/historyServerforSpark目录
    root@Master:/# hadoop fs -mkdir /historyServerforSpark
    root@Master:/# hadoop fs -ls /

    5.8.启动spark集群
    root@Master:~# cd /usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin/
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin# ./start-all.sh

    5.9.启动history-serve
    root@Master:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/sbin# ./start-history-server.sh

    
测试集群工作状态的一些指令 :
bin/hdfs dfsadmin -report     查看hdfs的各节点状态信息
bin/hdfs haadmin -getServiceState nn1         获取一个namenode节点的HA状态
sbin/hadoop-daemon.sh start namenode  单独启动一个namenode进程
./hadoop-daemon.sh start zkfc   单独启动一个zkfc进程
            
            


 
 类似资料: