1、学习oozie:
它是一个用于管理Hadoop的工作流程调度系统。Workflow是一个DAG(有向无环图)。
运行java:
<action name='java1'> <java> <main-class> a.b.c.MyJavaMain </main-class> <java-opts> -Xms512m </java-opts> <arg> arg1 </arg> <arg> arg2 </arg> <job-tracker>foo.bar:8021</job-tracker> <name-node>foo1.bar:8020</name-node> <configuration> <property> <name>abc</name> <value>def</value> </property> </configuration> </java> </action> |
java-opts:命令行的参数,这些参数用于启动将执行java应用程序的JVM。
arg:包含面函数的参数。
java应用程序在hadoop集群中作为map-reduce作业执行,只有一个mapper任务。必须按照如下格式:
-
<job-tracker>
-
<name-node>
-
<configuration>
运行MapReduce:
三个组件:
job.properties: 指定运行工作流程所需的基本参数。 要指定的一个强制属性是oozie.wf.application.path,它指向存在workflow.xml的HDFS的位置。
workflow.xml:
<jobtracker> element is used to specify the url of the hadoop job tracker.
<namenode> element is used to specify the url of the hadoop namenode.
<prepare>元素用于指定在开始操作(例如删除现有输出目录(<delete>)或创建新输出目录(<mkdir>))之前需要执行的操作列表。
mapred.job.queue.name指定作业将提交到的队列名。如果未提及,则假定默认队列为default。
mapred.mapper.class指定要使用的Mapper类。
mapred.reducer.class指定要使用的Reducer类。
mapred.input.dir指定HDFS上的输入目录,MapReduce作业的输入位于该目录中。
mapred.output.dir指定HDFS上将生成MapReduce作业输出的目录。
Libraries: 工作流中使用的库
运行时:
-config选项指定属性文件的位置,在我们的示例中位于用户的主目录中。 (注意:只有工作流和库需要在HDFS上,而不是属性文件)。
-oozie选项指定Oozie服务器的位置。 如果使用服务器URL设置变量OOZIE_URL,则可以省略此项。
-info选项查看其状态。
MapReduce的其他说明:
1、变量可以在一下位置定义,并且依据相应顺序作用:
-
job.properties
-
config-default.xml
-
workflow.xml
-
job-xml file for job-xml
2、访问以前的hadoop计数器
<arg>${hadoop:counters("mr1")["COMMON"]["COMMON.ERROR_ACCESS_DH_FILES"]}</arg>
3、为hadoop job 增加内存
<property>
<name>mapred.child.java.opts</name>
<value>-Xmx1024M</value>
</property>
4、使用用户自定义输入
<property>
<name>mapred.input.format.class</name>
<value>com.yahoo.ymail.antispam.featurelibrary.TextInputFormat</value>
</property>
5、使用“#”创建符号链接;<file>testdir1/dict.txt#dict1</file>
<archive>testtar.tgz#tgzdir</archive>
6、使用streaming:
<streaming>
<mapper>/bin/cat</mapper>
<reducer>/usr/bin/wc</reducer>
</streaming>
运行Pig: Pig是一个分析大型数据集的平台,它包含用于表达数据分析程序的高级语言,以及用于评估这些程序的基础结构。
<script>:执行的Pig脚本
<argument>:脚本的参数
运行Sqoop:用于在Apache Hadoop和结构化数据存储(如关系数据库)之间高效传输批量数据的工具。
要运行Sqoop作业,必须使用resource-manager,name-node和Sqoop命令或arg元素以及配置来配置sqoop操作。
prepare元素指示在开始作业之前要删除或创建的路径列表。 指定的路径必须以hdfs:// HOST:PORT开头。
job-xml元素指定包含Sqoop作业配置的文件。 从模式0.3开始,允许多个job-xml元素以指定多个job.xml文件。
configuration元素包含传递给Sqoop作业的配置属性。
使用command元素时,Oozie会将每个空间上的命令拆分为多个参数。
<command>import --connect jdbc:hsqldb:file:db.hsqldb --table TT --target-dir hdfs://localhost:8020/user/tucu/foo -m 1</command>
当使用arg元素时,Oozie会将每个参数值作为参数传递给Sqoop。
当单个参数中有空格时,应使用arg变体。
<arg>import</arg>
<arg>--connect</arg>
<arg>jdbc:hsqldb:file:db.hsqldb</arg>
<arg>--table</arg>
<arg>TT</arg>
<arg>--target-dir</arg>
<arg>hdfs://localhost:8020/user/tucu/foo</arg>
<arg>-m</arg>
<arg>1</arg>
2、学习sqoop
http://sqoop.apache.org/docs/1.99.7/user/CommandLineClient.html
http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html
两代之间是两个完全不同的版本,不兼容。sqoop2: (1) 引入sqoop server,集中化管理connector等。(2) 多种访问方式:CLI,Web UI,REST API。(3) 引入基于角色的安全机制。我实习的公司使用了sqoop1。
codegen 生成与数据库记录交互的代码
create-hive-table 将表定义导入Hive
eval 评估SQL语句并显示结果
export 将HDFS目录导出到数据库表
help 列出可用命令
import 将数据库中的表导入HDFS
import-all-tables 将表从数据库导入HDFS
import-mainframe 将主机数据集导入HDFS
list-databases 列出服务器上的可用数据库
list-tables 列出数据库中的可用表
version 显示版本信息
主要用到import和export。
import需要注意-password的使用,因为有可能会造成窥探。可以采用--password-file或者--password-alias。 Sqoop使用-m或--num-mappers参数指定映射任务(并行进程)的数量默认情况下,使用四个任务,不要将并行度增加到大于MapReduce群集中可用的并行度。 同样,不要将并行度提高到数据库可以合理支持的程度。 Sqoop使用拆分列来分割工作负载。默认情况下,Sqoop将识别表中的主键列(如果存在)并将其用作拆分列。例如,如果您的表的主键列id为最小值为0且最大值为1000,并且Sqoop被指示使用4个任务,则Sqoop将运行四个进程,在不同的任务中设置为(0,250),(250,500),(500,750)和(750,1001)。
--connect <jdbc-uri>指定JDBC连接字符串
--connection-manager <class-name>指定要使用的连接管理器类
--driver <class-name>手动指定要使用的JDBC驱动程序类
--hadoop-mapred-home <dir>覆盖$ HADOOP_MAPRED_HOME
--help打印使用说明
--password-file设置包含验证密码的文件的路径
-P从控制台读取密码
--password <密码>设置验证密码
--username <username>设置认证用户名
--verbose工作时打印更多信息
--connection-param-file <filename>提供连接参数的可选属性文件
--relaxed-isolation将连接事务隔离设置为对映射器未提交的读取。
export需要注意--export-dir参数和--table或--call之一是必需的。它们指定要在数据库(或要调用的存储过程)中填充的表,以及包含源数据的HDFS中的目录。
--connect <jdbc-uri>指定JDBC连接字符串
--connection-manager <class-name>指定要使用的连接管理器类
--driver <class-name>手动指定要使用的JDBC驱动程序类
--hadoop-mapred-home <dir>覆盖$ HADOOP_MAPRED_HOME
--help打印使用说明
--password-file设置包含验证密码的文件的路径
-P从控制台读取密码
--password <密码>设置验证密码
--username <username>设置认证用户名
--verbose工作时打印更多信息
--connection-param-file <filename>提供连接参数的可选属性文件
--relaxed-isolation将连接事务隔离设置为对映射器未提交的读取。