zoukankan      html  css  js  c++  java
  • Centos搭建mysql/Hadoop/Hive/Hbase/Sqoop/Pig

     

    目录:

    准备工作

    Centos安装 mysql

    Centos安装Hadoop

    Centos安装hive

    JDBC远程连接Hive

    Hbase和hive整合

    Centos安装Hbase

    准备工作:

    配置/etc/hosts

    127.0.0.1   localhost localhost.localdomain
    192.168.0.120 centos
    

    集中修改/etc/profile

    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_25/
    export JRE_HOME=/usr/lib/jvm/jdk1.7.0_25/jre
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
    export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export HADOOP_HOME=/usr/local/hadoop-2.2.0
    export HBASE_HOME=/usr/local/hbase
    export HIVE_HOME=/usr/local/hive
    export PATH=$PATH:$HADOOP_HOME/:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin  

    其他确认信息:

      1.同步集群时间:集群之间的时间按差距不要超过30秒,因为如果不同步的话,后面hbase的regionServer的时候会报错的。

      2.在hadoop用户下,确认环境变量。hostname。service iptables status等。  

    Centos安装 mysql

    下载地址::http://dev.mysql.com/downloads/

    http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.7/

    创建目用户及用户组权限

    [root@localhost] groupadd mysql
    [root@localhost] useradd -r -g mysql mysql

    yum安装,如果需要更高版本可以自行下载

    yum -y install  mysql-server 安装版本较低

    设置字符集和远程登录

    vim /etc/my.cnf

    [client]
    port=3306
    socket=/var/lib/mysql/mysql.sock
    default-character-set=utf8
    
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    user=mysql
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    default-character-set = utf8
    character-set-server=utf8
    collation-server=utf8_general_ci
    init_connect='SET collation_connection=utf8_general_ci'
    init_connect='SET NAMES utf8'
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    default-charater-set=utf8
    

    设置开机启动

    chkconfig mysqld on

    chkconfig --list mysqld

    /etc/rc.d/init.d/mysqld start

    为root设置密码

    mysql -uroot
    select user,host,password  from mysql.user;
    set password for root@localhost = password('123456');
    exit;重新登录看有没有生效。 

    打开远程连接

    mysql> use mysql;
    mysql> desc user;
    mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";	//为root添加远程连接的能力
    mysql> update user set Password = password('123456') where User='root';	//设置root用户密码
    mysql> select Host,User,Password from user where User='root';
    mysql> flush privileges;
    mysql> exit

    若还不能进行远程连接,关闭防火墙
    /etc/rc.d/init.d/iptables stop

    手动安装更高版本,可参考:

    http://www.cnblogs.com/zhoulf/archive/2013/01/25/zhoulf.html

    http://www.cnblogs.com/xiongpq/p/3384681.html

    Centos安装Hadoop

    要远程访问Hadoop,首先得关闭防火墙:

    查看状态:/etc/init.d/iptables status

    关闭:/etc/init.d/iptables stop

    永久性关闭:

    chkconfig --level 35 iptables off 再重启

    选择性开放:重启后生效 或修改/etc/sysconfig/iptables

    /sbin/iptables -l INPUT -p tcp -dport 80 -j ACCEPT

    /sbin/iptables -l INPUT -p tcp -dport 22 -j ACCEPT

    安装Hadoop

    cd /usr/local

    tar -zxvf hadoop-2.2.0.tar.gz  

    ln -s hadoop-2.2.0 hadoop

    设置ssh无密码登陆

    ssh-keygen -t  rsa 直接回车
    cat ~/.ssh/id_rsa.pub >>  ~/.ssh/authorized_keys
    chmod 700 ~/.ssh
    chmod 644 ~/.ssh/authorized_keys
    这样就可以了,再者修改/etc/hosts,将ip和hostname对应起来

    修改文件:
    hadoop-env.sh
    export HADOOP_IDENT_STRING=$USER
    export  JAVA_HOME=/usr/lib/jvm/jdk1.8.0_25
    export HADOOP_HOME=/usr/local/hadoop-2.2.0
    export PATH=$PATH:/usr/local/hadoop-2.2.0/bin
    

     hdfs-site.xml

    <configuration>
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    
    <property>
    <name>dfs.name.dir</name>
    <value>/usr/local/hadoop-2.2.0/hdfs/name</value>
    </property>
    
    <property>
    <name>dfs.data.dir</name>
    <value>/usr/local/hadoop-2.2.0/hdfs/data</value>
    </property>
    
     <property>    
        <name>dfs.permissions</name>    
        <value>false</value>    
      </property> 
    <property> 
    <name>dfs.datanode.max.xcievers</name> 
    <value>4096</value> 
    </property>
    
    </configuration>
    

    注意:dfs.replication是系统重启之后,新加入文件就会按照这个备份系数来存放文件。要改变现有的文件的备份,可以在命令行下去设置。

    记得要创建文件目录:

    mkdir   /usr/local/hadoop-2.2.0/hdfs/
    mkdir   /usr/local/hadoop-2.2.0/hdfs/data
    mkdir   /usr/local/hadoop-2.2.0/hdfs/name
    

     core-site.xml

    <configuration>
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.0.120:8020</value>
    </property>
    
    <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/local/hadoop-2.2.0/hadoop_tmp</value>
    </property>
    </configuration>
    

    注意:fs.defaultFS指定了HDFS的地址和端口,Hbase就能直接用此地址作为数据文件的根目录,如果不配置,默认的是在/tmp下,系统启动之后酒会没有了

    mapred-site.xml

    <configuration>
    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>
    
     <property>    
        <name>mapred.system.dir</name>    
        <value>/usr/local/hadoop-2.2.0/mapred/system</value>    
        <final>true</final>    
      </property>    
        
      <property>    
        <name>mapred.local.dir</name>    
        <value>/usr/local/hadoop-2.2.0/mapred/local</value>    
        <final>true</final>    
      </property>
    
    </configuration>  

    yarn-site.xml

    <configuration>
    <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>
    </configuration>
    

     slaves

    192.168.0.120  

    start-all.sh jps

    namenode datanode ResourceManager NodeManager SecondaryNameNode 必须有

    注意:

    如果是集群配置,则将目录拷贝到每一个datanode上。scp -r...

    第一次启动记得要在Master hadoop上格式化文件爱你系统:hdfs namenode -format    hdfs dfsadmin -report

    远程myeclipse和eclipse连接hadoop,参考:

    HDP2.0.6+hadoop2.2.0+eclipse(windows和linux下)调试环境搭建

    Centos安装hive

    cd /usr/local

    tar -zxvf hive-0.12.0.tar.gz  

    ln -s hive-0.12.0 hive 建立软连接

    修改文件:

    将conf下四个模板文件修改名称
     cd  /usr/local/hive/conf
     copy hive-default.xml.template hive-site.xml
     copy hive-env.sh.template hive-env.sh
     copy hive-exec-log4j.properties.template hive-exec-log4j.properties
     copy hive-log4j.properties.template hive-log4j.properties

      在官方0.12.0的发布版本中的 hive-default.xml.template 中有 bug,在 2000行:

        <value>auth</auth>  修改为:<value>auth</value>

    hive-env.sh,在最后加:

    export HIVE_CONF_DIR=$HIVE_HOME/conf
    export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib
    

    hive-site.xml:以下是需要修改的键值对,其余的默认

    <configuration> 
    
    <property>  
    <name>hive.metastore.local</name>  
      <value>true</value>  
    </property>  
      
    <property>  
    <name>javax.jdo.option.ConnectionURL</name>  
      <value>jdbc:mysql://192.168.0.120:3306/hive?createDatabaseIfNotExist=true</value>  
    </property>  
      
    <property>  
    <name>javax.jdo.option.ConnectionDriverName</name>  
      <value>com.mysql.jdbc.Driver</value>  
    </property>  
      
    <property>   
      <name>javax.jdo.option.ConnectionUserName</name>   
      <value>hive</value>   
    </property>   
        
    <property>   
      <name>javax.jdo.option.ConnectionPassword</name>   
      <value>123456</value>   
    </property>   
    
    <property>   
      <name>datanucleus.fixedDatastore</name>   
      <value>false</value>   
    </property>  
    
    <property>
      <name>hive.exec.scratchdir</name>
      <value>/tmp/hive-${user.name}</value>
      <description>Scratch space for Hive jobs</description>
    </property>
    
    <property>
      <name>hive.metastore.warehouse.dir</name>
      <value>/user/hive/warehouse</value>
      <description>location of default database for the warehouse</description>
    </property>
    <property>  
      <name>hive.metastore.uris</name>  
      <value>thrift://centos:9083</value>  
    </property>
    
    </configuration>
    

      

    建立mysql元数据库:

    hive需要用到关系型数据库来存储元信息,目前只支持mysql,创建mysql 的是记得设置字符集为latin1,否则后期建表会出问题

    默认meta数据库为derby ,为了避免使用默认的Derby数据库(有并发访问和性能的问题),通常还需要配置元数据库为MySQL

    mysql  -uroot -p123456

    mysql> CREATE USER 'hive' IDENTIFIED BY 'mysql';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'192.168.0.120' WITH GRANT OPTION;
    或者
    mysql> GRANT ALL PRIVILEGES ON *.* TO hive@"%" IDENTIFIED BY "123456";	//可以远程连接
    mysql> update user set Password = password('123456') where User='hive';
    mysql> flush privileges;
    建立hive专用的元数据库
    mysql> create database hive;

    出现错误:Specified key was too long:max key is 767 bytes

    解决办法:在hive数据库中执行:alter database hive character set latin1.hive元数据库的字符集为latin1.

    配置HDFS中的目录和权限:

        hive.metastore.warehouse.dir:(HDFS上的)数据目录
        hive.exec.scratchdir:(HDFS上的)临时文件目录
        hive.metastore.warehouse.dir默认值是/user/hive/warehouse
        hive.exec.scratchdir默认值是/tmp/hive-${user.name}

    在hive-site.xml中这些都是默认值,暂时不改。在hdfs上创建相应文件夹

    hdfs dfs -mkdir       /tmp
    hdfs dfs -mkdir       /user/hive/warehouse
    hdfs dfs -chmod g+w   /tmp
    hdfs dfs -chmod g+w   /user/hive/warehouse

    用mysql当元数据库,别忘了找一个mysql的jdbcjar包mysql-connector-java-3.1.12-bin.jar也拷贝到hive-0.12.0/lib下。

    在CLI命令行下运行Hive,并进行测试。

    出现问题:ermission denied: user=root, access=EXECUTE, inode="/tmp":hadoop:supergroup:drwx-w----
    解决办法:hdfs dfs -chmod 777 /tmp

    JDBC远程连接Hive

      如果需要通过jdbc/odbc的方式来连接hive,需要启动metastore shfift,因此必须配置hive.metastore.uris。

    而hive.aux.jars.path是与hbase整合的时候需要用到的jar包,必须加上。

      如果不加端口默认启动:hive --service metastore,则默认监听端口是:9083 ,注意客户端中的端口配置需要和启动监听的端口一致。

      服务端启动正常后,客户端就可以执行hive操作了。

      hive --service metastore -p <port_num>   也可以自定义监听端口。

    debug 模式启动hive服务:

      hive --service metastore --hiveconf  hive.root.logger=DEBUG,console

      hive --service hiveserver --hiveconf  hive.root.logger=DEBUG,console

     启动服务,这样jdbc:hive就能连上,默认10000端口,后面的部分一定要带上,否则用eclipse连接不上的。

     起来后我们在eclipse就可以使用jdbc:hive来连接了。如

        Class.forName("org.apache.hadoop.hive.jdbc.HiveDriver"); //注意驱动名称不要写错了,有时是org.apache.hive.jdbc.HiveDriver
        Connection conn = DriverManager.getConnection("jdbc:hive://centos:10000/default","root","123456");//root 123456远程系统的账号和密码
        return conn;

    其实使用上和普通的数据库已经很相似了,除了建表的语句有一些差别。

    注意:如果是hiveserver2的话,启动是相似的,接口:

    	public static Connection getConnection() {
    		String driverName = "org.apache.hive.jdbc.HiveDriver";
    		Connection con = null;
    		try {
    			Class.forName(driverName);
    			con = DriverManager.getConnection(
    					"jdbc:hive2://192.168.0.120:10000/default", "root", "123456");
    			if (con != null) {
    				System.out.println("connecte succ.");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return con;
    	}
    

      

    Hbase和hive整合

    而hive.aux.jars.path是与hbase整合的时候需要用到的jar包,必须加上。

    将hbase的包拷贝到hive/lib下

    [root@HADOOP7 hive]# cd /usr/lib/hbase/lib/

    [root@HADOOP7 lib]# cp ./hbase-*.jar ./protobuf-*.jar ./zookeeper.*jar ./htrace-core-2.04.jar  ../hive/lib

    注意,如果hive/lib中存在zookeeper.jar,protobuf.jar,以hbase中的为准,移除到hive的备份目录去

    修改hive配置文件

      加载hive连接hbase需要的jar 包

      在Ambari上直接修改 hive ——>configs——》

      内容为:

    file:///usr/lib/hive/lib/hive-hbase-handler-0.12.0.2.0.6.1-102.jar,file:///usr/lib/hive/lib/hbase-protocol-
    0.96.1.2.0.6.1-102-hadoop2.jar,file:///usr/lib/hbase/lib/protobuf-java-2.5.0.jar,file:///usr/lib/hbase/lib/hbase-
    client-0.96.1.2.0.6.1-102-hadoop2.jar,file:///usr/lib/hbase/lib/hbase-common-0.96.1.2.0.6.1-102-
    hadoop2.jar,file:///usr/lib/hbase/lib/zookeeper.jar,file:///usr/lib/hbase/lib/guava-12.0.1.jar,file:///usr/lib/hbase
    /lib/hbase-server-0.96.1.2.0.6.1-102-hadoop2.jar
    

      如果在hive-site.xml中,对应加一项property.

    将hbase-site.xml拷贝到hive/conf下

    测试:

      首先先启动hadoop和hbase,再启动hive元数据库:

    hive --service metastore  --hiveconf hive.root.logger=DEBUG,console

       启动之后会一直卡住不动,放着不管,打开另外一个窗口即可。

      如果直接hive会出现以下的错误:

    Unable to instantiate org.apache.hadoop.hive。。。。

      例子:

    drop table hbase_detail3; 
    
    CREATE TABLE hbase_detail3(key string, values string)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ("hbase.columns.mapping" = "values:val")
    TBLPROPERTIES("hbase.table.name" = "detail3");
    
    insert overwrite table hbase_detail3 select * from detail3;
    建外部表:
    
    CREATE EXTERNAL TABLE hbase_detail3.....后面一样,丹前提是hbase中已经存在表detail3
    

      修改hdfs上hbase文件夹的权限

    hadoop fs -chmod -R 755 /user/hbase

     

    Centos安装Hbase

    tar zxvf hbase-0.92.0.tar.gz
    ln -s hbase-0.92.0 hbase  建立软链接的好处就是,在进行更新时,只需要重新建立软连接即可,而不用修改配置
    修改文件:

    (伪分布式)

    hbase-env.sh:

    export JAVA_HOME=/usr/java/jdk1.8.0_25 
    export HBASE_LOG_DIR=/usr/local/hbase

    hbase-site.xml:

    <configuration>
    <property> 
    <name>hbase.rootdir</name> 
    <value>hdfs://192.168.0.120:8020/hbase</value> 
    </property> 
    <property> 
     <name>hbase.cluster.distributed</name> 
     <value>true</value> 
      </property> 
      <property>
       <name>dfs.replication</name>
       <value>1</value>
      </property>
      <property> 
     <name>hbase.zookeeper.quorum</name> 
     <value>192.168.0.120</value>
    </configuration>
    hbase.zookeeper.quorum一定要是奇数,要不然选举不出HR
    regionServer配置,真正存放数据信息的地方,伪分布式略。

      hbase.rootdir中的地址要跟hadoop2.2.0中配置fs.defaultFS的目录相同,然后加上自己要新建的目录hbase

    在命令行下启动hbase

      start-hbase.sh

      stop-hbase.h

      web界面:http://master:60010/

      jps:增加了3个进程,HRegionServer,HQnorumPeer,HMaster

    注意:如果是由hbase自己管理zookeeper,需要设置export HBASE_MANAGES-ZK=true,如果不是,则需要再下载zookeeper进行配置

    测试 hbase
    1).登录hbase客户端

    ./bin/hbase shell

    2).新建数据表,并插入3条记录 

    复制代码
    hbase(main):003:0> create 'test', 'cf' 
    0 row(s) in 1.2200 seconds 
    hbase(main):003:0> list 'table' 
    test 
    1 row(s) in 0.0550 seconds 
    hbase(main):004:0> put 'test', 'row1', 'cf:a', 'value1' 
    0 row(s) in 0.0560 seconds 
    hbase(main):005:0> put 'test', 'row2', 'cf:b', 'value2' 
    0 row(s) in 0.0370 seconds 
    hbase(main):006:0> put 'test', 'row3', 'cf:c', 'value3' 
    0 row(s) in 0.0450 seconds
    复制代码

    3).查看插入的数据 

    hbase(main):007:0> scan 'test' 
    ROW COLUMN+CELL 
    row1 column=cf:a, timestamp=1288380727188, value=value1 
    row2 column=cf:b, timestamp=1288380738440, value=value2 
    row3 column=cf:c, timestamp=1288380747365, value=value3 
    3 row(s) in 0.0590 seconds

    4).读取单条记录 

    hbase(main):008:0> get 'test', 'row1' 
    COLUMN CELL 
    cf:a timestamp=1288380727188, value=value1 
    1 row(s) in 0.0400 seconds

    5).停用并删除数据表 

    hbase(main):012:0> disable 'test' 
    0 row(s) in 1.0930 seconds 
    hbase(main):013:0> drop 'test' 
    0 row(s) in 0.0770 seconds

    6).退出 

    hbase(main):014:0> exit

     

    Centos安装sqoop

    摘抄(Hbase分布式配置修改)

    1.修改conf/hbase-env.sh,添加jdk支持

    export JAVA_HOME=/usr/local/jdk 
    export HBASE_MANAGES_ZK=true 
    export HBASE_LOG_DIR=/data/logs/hbase

    2. 修改conf/hbase-site.xml,

    <property> 
    <name>hbase.rootdir</name> 
    <value>hdfs://master:9000/hbase</value> 
    </property> 
    <property> 
    <name>hbase.cluster.distributed</name> 
    <value>true</value> 
    </property> 
    <property> 
    <name>hbase.master</name> 
    <value>hdfs://master:60000</value> 
    </property> 
    
    <property> 
    <name>hbase.zookeeper.quorum</name> 
    <value>slave-001,slave-002,slave-003</value> 
    <description>Comma separated list of servers in the ZooKeeper Quorum. For example, "host1.mydomain.com,host2.mydomain.com,host3.mydomain.com". By default this is set to localhost for local and pseudo-distributed modes of operation. For a fully-distributed setup, this should be set to a full list of ZooKeeper quorum servers. If HBASE_MANAGES_ZK is set in hbase-env.sh this is the list of servers which we will start/stop ZooKeeper on. </description> 
    </property> 
    <property> 
    <name>hbase.zookeeper.property.dataDir</name> 
    <value>/data/work/zookeeper</value> 
    <description>Property from ZooKeeper's config zoo.cfg. The directory where the snapshot is stored. </description> 
    </property>
    </property>
    <property>
    <name>hbase.zookeeper.property.clientport</name>
    <value>2181</value>
    </property>
    复制代码

    hbase.rootdir设置hbase在hdfs上的目录,主机名为hdfs的namenode节点所在的主机 
    hbase.cluster.distributed设置为true,表明是完全分布式的hbase集群 
    hbase.master设置hbase的master主机名和端口 
    hbase.zookeeper.quorum设置zookeeper的主机,建议使用单数


    3.修改hadoop的目录下的conf/hdfs-site.xml

    <property> 
    <name>dfs.datanode.max.xcievers</name> 
    <value>4096</value> 
    </property>

    4.修改conf/regionservers 
    将所有的datanode添加到这个文件,类似与hadoop中slaves文件

    5.拷贝hbase到所有的节点

    其他配置:

    hbase-env.sh 如果想使用HBase自带的zookeeper,设置:

    export HBASE_MANAGES_ZK=true(启用hbase管理zookeeper的形式)

    Centos安装Sqoop

     非常简单,五分钟搞定。

    [root@centos local]# cp /home/kang/Desktop/temp/sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz ./

    tar -zxvf  sqoop-1.4.5.bin__hadoop-2.0.4-alpha.tar.gz
    ln -s sqoop-1.4.5.bin__hadoop-2.0.4-alpha/ sqoop
    vim /etc/profile
    export SQOOP_HOME=/usr/local/sqoop
    export PATH=$PATH:$HADOOP_HOME/:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$HIVE_HOME/bin:$SQOOP_HOME/bin
    source /etc/profile
    mv sqoop-env.template.sh sqoop-env.sh
    vim sqoop-env.sh:
    export HADOOP_COMMON_HOME=/usr/local/hadoop-2.2.0
    export HADOOP_MAPRED_HOME=/usr/local/hadoop-2.2.0/share/hadoop/mapreduce
    export HBASE_HOME=/usr/local/hbase(不用可以不配置)
    export HIVE_HOME=/usr/local/hive(不用可以步配置)
    


    sqoop无需启动即可使用,如链接mysql数据库验证:

    sqoop list-databases --connect jdbc:mysql://centos:3306/ --username root --password 123456
    information_schema
    hive
    mysql
    test
    

     Centos安装Pig

    tar -zxvf pig-0.12.1.tar.gz
    
     ln -s pig-0.12.1 pig
    
    vim /etc/profile
    
    export PIG_HOME=/usr/local/pig
    export PIG_CALSSPATH=$HADOOP_HOME/etc/hadoop
    
    export PATH=.....$SQOOP_HOME/bin:$PIG_HOME/bin
    
    cd pig/conf
    
    vim pig.properties
    
    fs.default.name=hdfs://centos:8020/
    mapred.job.tracker=centos:8010
    
    运行:pig
    
    grunt> ls /
    

     

  • 相关阅读:
    根据不同的状态查询错误
    myeclipse修改了安装目录名字打不开解决方法
    前端c标签foreach传值给后台
    Could not find result map java.lang.Integer] with root cause
    the import XXXX cannot be resolved 解决方法
    当我的url请求会变成jsp页面路径时的解决办法
    当项目启动很久一直超时怎么办?
    前端里面的变量名字多一个“;”会有这么多的区别
    java String.format()的问题
    String.format
  • 原文地址:https://www.cnblogs.com/kxdblog/p/4162729.html
Copyright © 2011-2022 走看看