sqoop 从 hive 导出到 mysql 一直卡在map 100% reduce 0% 不动

sqoop 从 hive 导出到 mysql 一直卡在map 100% reduce 0% 不动,第1张

我的也是这样 我的导出代码是

/bigdata/sqoop/bin/sqoop export \

--connect "jdbc:mysql://1921680211:3306/bigdatauseUnicode=true&characterEncoding=utf-8" \

--username $mysql_db_name \

--password $mysql_db_pwd \

--table $table_name \

--input-fields-terminated-by '\001' \

--export-dir $hadoop_dir

用sqlserver2000自带的导入导出数据工具,将access表中的数据导入到oracle中去 下面是我在一个人的博客中找到的注意事项,你可以看一看 1导入的时候access中的表名必须是大写的,否则导进去之后,因为sqlplus运行到后台的时候会把所有字符自动变为大写,而oracle大小写敏感,所以生成的小写表无法访问,你用toad或DBARtsion也是白搭 2表中的字段名称比如user之类的改进改名,很有可能就会因为这个卡掉,得重新导 3注意数据库中的数据,有可能会出现因为数据导致导入一半后卡住,出现这种问题的时候多半是因为备注转化为的对象类型不对 4ACCESS中的备注问题,这个是个头疼的问题,真tm头疼,刚开始我用OLE DB方式连接数据库,备注默认转化的oracle数据类型为LONG,但是TNND每张oracle表中最多只有一个LONG类型的字段,(古怪的规定~!我找了半天没找到原因),琢磨了半天后决定舍弃(当初选OLE DB是受页面里面OLE DB连接比ODBC连接先进点的观点影响。。),改用ODBC,这里连接数据库的时候有几种方法,我选的是用定义好的文件来连接,在生成文件的时候一定要注意,用户名和密码必须是大写的,不然的时候你就等着哭吧,然后配连接好的,执行导入,我第一遍的时候就相当成功,但是后来因为插错数据和表格,又懒的删只好删掉用户重新导,一模一样的数据,就是用户名变了,nnd就报了n多错误,备注自动生成的方式是CLOB,我们ACCESS数据库表中还有个OLE对象类型的,自动转化为BLOB类型,在页面上不能直接用通俗的方法获取rs读CLOB,要是这样写,一准报错,这个问题一直没解决。。从网上找了些资料,有种说将对象分割拿出来,但太麻烦了,能生成一个完整的结果集就不错了。。还有迭代,我们哥俩商量了半天准备用VARCHAR2(2000)替代,结果页面报错。

hive中创建dept表

create table dept(

deptno int,

dname string,

loc string

)

row format delimited fields terminated by ‘\t‘ lines terminated by ‘\n‘

stored as textfile;

导入数据:

sqoop import --connect jdbc:oracle:thin:@1921681107:1521:ORCL \

--username SCOTT --password tiger \

--table DEPT \

--hive-overwrite --hive-import --hive-table dept \

--fields-terminated-by ‘\t‘ --lines-terminated-by ‘\n‘ \

-m 3;

HIVE导出到ORACLE

需要分两步:

第一步:先写入到hdfs

insert overwrite directory ‘/user/hadoop/DEPT_HIVE_EXPORT‘ select from dept;

第二步:由hdfs导出到oracle

导出到数据库时,要确保表已经在数据库中存在,否则报错。

create table DEPT_DEMO as select from DEPT where 1=2;

sqoop export --connect jdbc:oracle:thin:@1921681107:1521:ORCL \

--username SCOTT --password tiger \

--table DEPT_DEMO \

--export-dir /user/hadoop/DEPT_HIVE_EXPORT \

--fields-terminated-by ‘\001‘ \

-m 2;

注:从hive导出到hdfs的分隔符不是,而是\001;如果不指定分隔符,则报错:Caused by: javalangNumberFormatException

一、Mysql与HDFS互导数据

环境:

宿主机器 *** 作系统为Win7,Mysql安装在宿主机上,宿主机地址为1921686696

3台虚拟机 *** 作系统为Ubuntu-12041-32位

三台虚拟机已成功安装Hadoop,并实现免密钥互访,配hosts为:

1921686691 masternode

1921686692 slavenode1

1921686693 slavenode2

/etc/profile已配置好必备环境变量HADOOP_HOME,JAVA_HOME

实验在masternode上进行,已成功连接mysql

步骤一,下载安装包:

我安装的Hadoop版本是原生hadoop-0202030,SQOOP不支持此版本,可使用CDH3版本hadoop,也可以通过拷贝相应的包到sqoop-120-CDH3B4/lib下,依然可以使用。

下载相关文件:

>

场景

使用sqoop从MySQL导出数据至Hive时,如果数据中包含hive指定的列分隔符,如\001 或\t,那么在Hive中就会导致数据错位;如果数据中包含换行符\n,那么就会导致原先的一行数据,在Hive中变成了两行。

解决办法

在sqoop执行时,使用如下参数:

如:

一分钟了解互联网数据挖掘流程

1、爬虫抓取网络数据

真实的数据挖掘项目,一定是从获取数据开始的,除了通过一些渠道购买或者下载专业数据外,常常需要大家自己动手爬互联网数据,这个时候,爬虫就显得格外重要了。

Nutch爬虫的主要作用是从网络上抓取网页数据并建立索引。我们只需指定网站的顶级网址,如taobaocom,爬虫可以自动探测出页面内容里新的网址,从而进一步抓取链接网页数据。nutch支持把抓取的数据转化成文本,如(PDF、WORD、EXCEL、HTML、XML等形式)转换成纯文字字符。

Nutch与Hadoop集成,可以将下载的数据保存到hdfs,用于后续离线分析。使用步骤为:

向hdfs中存入待抓取的网站url

$ hadoop fs -put urldir urldir

注:

第一个urldir为本地文件夹,存放了url数据文件,每行一个url地址

第二个urldir为hdfs的存储路径。

启动nutch,在NUTCH_HONE目录下执行以下命令

$ bin/nutch crawlurldir –dir crawl -depth 3 –topN 10

命令成功执行后,会在hdfs中生成crawl目录。

2、MapReduce预处理数据

对于下载的原始文本文档,无法直接进行处理,需要对文本内容进行预处理,包括文档切分、文本分词、去停用词(包括标点、数字、单字和其它一些无意义的词)、文本特征提取、词频统计、文本向量化等 *** 作。

常用的文本预处理算法是TF-IDF,其主要思想是,如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来做分类。

输入原始文本内容:

Againit seems that cocoa delivered……

执行TF-IDF预处理:

hadoop jar $JAR SparseVectorsFromSequenceFiles……

输出文本向量:

9219:0246 453:0098 10322:021 11947:0272 ……

每一列是词及其权重,使用冒号分隔,例如“9219:0246”表示编号为9219的词,对应原始单词为“Again”,其权重值为0246。

3、Mahout数据挖掘

预处理后的数据就可以用来做数据挖掘。Mahout是一个很强大的数据挖掘工具,是分布式机器学习算法的集合,包括:协同过滤、分类、聚类等。

以LDA算法为例,它可以将文档集中每篇文档的主题按照概率分布的形式给出。它是一种无监督学习算法,在训练时不需要手工标注主题,需要的仅仅是指定主题的数量K。此外LDA的另一个优点则是,对于每一个主题均可找出一些词语来描述它。

输入预处理后的数据:

9219:0246 453:0098 ……

执行LDA挖掘算法:

mahout cvb –k 20……

输出挖掘结果:

topic1 {computer,technology,system,internet,machine}

topic2 {play,film,movie,star,director,production,stage}

我们可以获知用户的偏好是哪些主题,这些主题是由一些关键词组成。

4、Sqoop导出到关系数据库

在某些场景下,需要把数据挖掘的结果导出到关系数据库,用于及时响应外部应用查询。

sqoop是一个用来把hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如:MySQL ,Oracle 等)中的数据导入到hadoop的hdfs中,也可以将hdfs的数据导出到关系型数据库中:

sqoop export –connect jdbc:mysql://localhost:3306/zxtest –username root–password root –table result_test –export-dir /user/mr/lda/out

export *** 作实现把hdfs目录/user/mr/lda/out下数据导出到mysql的result_test表。

1、在MYSQL中创建一个参数表A,用来记录要传输的表的表名B和字段。 2、HDFS上的数据的格式和MYSQL中参数表A中B表的字段的数量一样。 3、从MYSQL的参数表A中,读取要传输的表B。把这些字段拼凑成一个insert语句,例如 ,拼凑为insert into b

版本不匹配,环境上版本固定,所以选用手动新建hbase表,再导入数据

bin/sqoop import --connect jdbc:oracle:thin:@19216816223:1521/orcl --username sitts --password password --table SITTSESB_SERVICE_PARAM --target-dir /sqoop/oracle/esb_service_param --split-by PARAM_ID --incremental append --check-column PARAM_ID --last-value 33

hdfs dfs -cat /sqoop/oracle/esb_service_param/part-m-00004

Sqoop 146 UserGuide

不用一致的,可以使用--columns指定哪些字段

--columns id,name,hobby,birthday

如果不使用--columns这个参数,那么个数就得一致了,不然会报错的

以上就是关于sqoop 从 hive 导出到 mysql 一直卡在map 100% reduce 0% 不动全部的内容,包括:sqoop 从 hive 导出到 mysql 一直卡在map 100% reduce 0% 不动、sqoop问题,求帮助、sqoop支持从mysql导出到oracle吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10194028.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存