资源描述
Hadoop集群的搭建过程与配置同《hadoop安装手册》的部分在此省略,本文主要介绍在集群搭建和运行过程中遇到的《hadoop安装手册》未介绍的问题。
本文并未介绍集群搭建和运行过程中遇到的所有问题,主要是在最后一遍在真实的服务器集群的搭建中遇到的问题及解决方法。
1.MySQL安装使用:
1.1下载安装包并解压
版本mysql5.7.13
安装包: mysql-5.7.13-1.el6.x86_64.rpm-bundle.tar
用tar –xvf 解压得到9个rpm安装包,其中test包不用安装,剩余8个分别是:
mysql-community-client-5.7.13-1.el6.x86_64.rpm
mysql-community-common-5.7.13-1.el6.x86_64.rpm
mysql-community-devel-5.7.13-1.el6.x86_64.rpm
mysql-community-embedded-5.7.13-1.el6.x86_64.rpm
mysql-community-embedded-devel-5.7.13-1.el6.x86_64.rpm
mysql-community-libs-5.7.13-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.13-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.13-1.el6.x86_64.rpm
1.2安装前准备
首先在安装之前检查系统中是否有已经安装的其他版本或者系统自带的mysql程序。进入root权限,输入su,回车输入密码。
已经进入root用户下,以下操作均在root用户下,输入:
rpm –qa | grep mysql(mysql)的大小写可能不同,适系统中可能存在的mysql版本等而定)。回车后会显示已经安装的mysql,然后输入命令rpm -e 后加上查找到的已安装的mysql名称卸载,若提示有其他程序依赖此程序可使用rpm -e –nodeps后加上查找到的已安装的mysql名称卸载。
若已安装使用过mysql,mysql的一些相关文件夹及配置文件也最好删除,否则重装后的mysql可能还是会出现重装前出现的问题。如使用以下命令删除:
rm -rf /var/lib/mysql
rm /etc/f
再次输入rpm -qa | grep mysql检查,直到都所有都卸载完成。
1.3Mysql安装
然后使用rpm –ivh 加上以上8个rpm的包名即可安装。在安装时需要注意顺序,因为每个包之间存在依赖关系。可以先随意顺序安装,过程中若提示依赖于哪个包就先安装哪个包。这样在安装完这8个包后,输入rpm –qa | grep mysql,查看是否8个包都安装成功。
1.4登录Mysql
之后输入以下命令重启mysql服务:
/etc/init.d/mysqld restart
如果是安装后第一次重启可能还会有初始化一些信息成功的一些显示。
Mysql默认root用户无密码所以可以直接输入命令:mysql –uroot以mysql的root用户登录。由于权限问题往往会出现以下的问题:
查找出各种说法,其中有种方法确实可以解决这个问题,如下:
输入命令 /etc/init.d/mysqld stop 停止mysql服务,然后输入以下命令:
mysqld_safe --user=root --skip-grant-tables --skip-networking &
之后用mysql –uroot命令进入mysql下,已经可以成功进入mysql。
此时便可以修改root用户密码,及给用户授权。修改密码命令为:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
运行后会出现如下问题:
输入命令:mysql> set global read_only=0; (关掉只读属性)
flush privileges;(刷新权限)
运行情况如下:
此时修改密码成功。退出登录后,用新修改的密码登录:
1.5 创建mysql的新用户hadoop:
为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error log中,关于error log的位置,如果安装的是RPM包,则默认是/var/log/mysqld.log。
validate_password_policy有以下取值:
Policy
Tests Performed
0 or LOW
Length
1 or MEDIUM
Length; numeric, lowercase/uppercase, and special characters
2 or STRONG
Length; numeric, lowercase/uppercase, and special characters; dictionary file
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。一般可通过log_error设置。
解决方法:
便可完成新用户的创建:
登录新用户进行测试:
1.6给新用户赋权限:
并查看用户信息:
Mysql安装完成 并可以正常运行,退出后即进行下一项。
2. Hive安装
2.1安装
下载hive安装包,使用tar – zxvf命令解压安装包,将hive安装在/home/hadoop/app/apache-hive-2.0.0-bin目录下。
2.2配置hive
修改conf配置文件,在该目录下新建文件夹hive-site.xml,将下面的内容添加到hive-site.xml文件中:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.local</name>
<value>true</value>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive_13?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>hadoop</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hadoop</value>
</property>
</configuration>
然后将mysql的java connector复制到依赖库中,配置环境变量:
export HIVE_HOM E=$PWD /home/hadoop/app/apache-hive-2.0.0-bin
export PATH=$PATH:$HIVE_HOME/bin
2.3启动并验证Hive安装
进入安装目录,使用命令bin/hive运行,会出现如下错误:
该错误发生的原因是没有初始化元数据,用初始化命令进行初始化:
schematool -dbType mysql –initSchema
初始化完成,结果如下图:
再次运行,并查看表,可以正常使用。
3. sqoop
3.1安装
下载sqoop安装包,使用tar –zxvf解压并安装。
3.2配置
将mysql的java connector复制到依赖库中,然后配置环境变量。将该文件sqoop-env.sh内容替换为:
#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/zkpk/hadoop-2.5.2
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/zkpk/hadoop-2.5.2
#set the path to where bin/hbase is available
export HBASE_HOME=/home/zkpk/hbase-0.98.9-hadoop2
#Set the path to where bin/hive is available
export HIVE_HOME=/home/zkpk/apache-hive-0.13.1-bin
#Set the path for where zookeper config dir is
#export ZOOCFGDIR=/usr/local/zk
3.3检查安装情况
使用命令bin/sqoop help显示正常,表示sqoop安装完成。
使用sqoop命令查看mysql的数据库和表,结果如下:
3.4文件互导(实际运行以MySQL导入Hive为例)
1)MySQL建表载入csv文件数据并检查结果
2)给Hive复制表结构并检查结果
3)将MySQL表内容导入Hive同结构的表并检查结果
1. sqoop的简介(简介,应用场景)
sqoop是Apache的顶级项目,是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库中的数据与hive,hdfs和hbase进行双向的转移。它通过JDBC连接关系型数据库,所以理论上支持JDBC的数据库它都支持如MySQL ,Oracle ,Postgres等。Sqoop中一大亮点就是可以通过hadoop的mapreduce把数据从关系型数据库中导入数据到HDFS。
2. sqoop原理(以import为例)
Sqoop在import时,需要制定split-by参数。Sqoop根据不同的split-by参数值来进行切分,然后将切分出来的区域分配到不同map中。每个map中再处理数据库中获取的一行一行的值,写入到HDFS中。同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域。 比如select max(split_by),min(split-by) from得到的max(split-by)和min(split-by)分别为1000和1,而num-mappers为2的话,则会分成两个区域(1,500)和(501-100),同时也会分成2个sql给2个map去进行导入操作,分别为select XXX from table where split-by>=1 and split-by<500和select XXX from table where split-by>=501 and split-by<=1000。最后每个map各自获取各自SQL中的数据进行导入工作。
Sqoop将数据从关系型数据库导入到Hadoop中(支持增量导入)
一个表在一个路径,分成多个文件(多个map任务)
Sqoop将数据从Hadoop中导出到关系型数据库
3. sqoop安装配置(解压安装,复制JDBC到lib下,配置sqoop-env.sh文件中的几个路径)
配置MySQL连接器:将mysql的java collector复制到sqoop路径下的lib中
Sqoop路径下的conf中的sqoop-env.sh中的路径前注释符去掉并写上真实路径
4. sqoop几种典型操作实例(每个命令中的参数的解释)
命令
类
说明
1
impor
ImportTool
从关系型数据库中导入数据(来自表或者查询语句)到HDFS中
2
export
ExportTool
将HDFS中的数据导入到关系型数据库中
3
codegen
CodeGenTool
获取数据库中某张表数据生成Java并打成jar包
4
create-hive-table
CreateHiveTableTool
创建Hive表
5
eval
EvalSqlTool
查看SQL执行结果
6
import-all-tables
ImportAllTablesTool
导入某个数据库下所有表到HDFS中
7
job
JobTool
8
list-databases
ListDatabasesTool
列出所有数据库名
9
list-tables
ListTablesTool
列出某个数据库下所有表
1)列出mysql数据库中的所有数据库
sqoop list-databases –connect jdbc:mysql://localhost:3306/ –username root –password 123456
2)连接mysql并列出test数据库中的表
sqoop list-tables –connect jdbc:mysql://localhost:3306/test –username root –password 123456
命令中的test为mysql数据库中的test数据库名称 username password分别为mysql数据库的用户密码
3)将关系型数据的表结构复制到hive中,只是复制表的结构,表中的内容没有复制过去。
sqoop create-hive-table –connect jdbc:mysql://localhost:3306/test
–table sqoop_test –username root –password 123456 –hive-table test
其中 –table sqoop_test为mysql中的数据库test中的表 –hive-table
test 为hive中新建的表名称
4)从关系数据库导入文件到hive中
sqoop import –connect jdbc:mysql://localhost:3306/zxtest –username
root –password 123456 –table sqoop_test –hive-import –hive-table test -m 1
5)将hive中的表数据导入到mysql中,在进行导入之前,mysql中的表hive_test必须已经提起创建好了。
sqoop export –connect jdbc:mysql://localhost:3306/zxtest –username
root –password root –table hive_test –export-dir
/user/hive/warehouse/new_test_partition/dt=2012-03-05
6)从数据库导出表的数据到HDFS上文件
sqoop import –connect
jdbc:mysql://10.28.168.109:3306/compression –username hadoop
–password 123456 –table HADOOP_USER_INFO -m 1 –target-dir
/user/test
7)从数据库增量导入表数据到hdfs中
./sqoop import –connect jdbc:mysql://10.28.168.109:3306/compression
–username=hadoop –password=123456 –table HADOOP_USER_INFO -m 1
–target-dir /user/test –check-column id –incremental append
–last-value 3
4. mahout
4.1下载解压安装包
下载mahout安装包,使用tar –zxvf解压并安装。然后使用bin/mahout启动mahout。
4.2使用mahout运行FPGrowth查找频繁集:
1) 将数据文件导入hdfs系统:
使用hadoop fs –mkdir purchase创建在分布式文件系统中用于存储数据的路径
使用hadoop fs –put +文件路径 +purchase 将数据存入hdfs中
1) 运行FPGrowth,
在mahout主目录下运行hadoop jar mahout-core-0.9.jar org.apache.mahout.fpm.pfpgrowth.FPGrowthDriver -i hadoop -o fpgrowth -g 50 -method mapreduce -e UTF-8 -tc 5 -s 2000
4.3存在的问题及解决方案如下:
a) 缺少commons-cli-2.0-mahout.jar包,实际上这个包存在mahout安装路径的lib下,需要将它复制到$HADOOP_HOME$下的share/hadoop/commo中,并发送到每个从节点的这个路径下。
b) 缺少mahout-math-0.9.jar包,实际上这个包存在mahout的安装路径下,需要将它复制到$HADOOP_HOME$下的share/hadoop/common中,并发送到每个从节点的这个路径下。
c) 缺少commons-lang3-3.1.jar包,实际上这个包存在mahout安装路径的lib下,需要将它复制到$HADOOP_HOME$下的share/hadoop/common中,并发送到每个从节点的这个路径下。
再次运行FPGrowth,可以成功运行,用以下命令查看结果并显示:
展开阅读全文