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 /

 

 

 

 

 

 

转载于:https://www.cnblogs.com/kxdblog/p/4162729.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值