我在hdfs中有一个表pos.pos_inv,由yyyymm分区.以下是查询:
select DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),5),
to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),yyyymm
from pos.pos_inv inv
INNER JOIN pos.POSActvyBrdg Brdg ON Brdg.EIS_POSActvyBrdgId = Inv.EIS_POSActvyBrdgId
where to_date(from_unixtime(unix_timestamp(Inv.nrmlzdwkenddt, 'MM/dd/yyyy')))
BETWEEN DATE_SUB(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6)
and DATE_ADD(to_date(from_unixtime(unix_timestamp(Inv.actvydt, 'MM/dd/yyyy'))),6)
and inv.yyyymm=201501
Run Code Online (Sandbox Code Playgroud)
我已将查询的分区值提供为201501,但仍然出现错误"
Error while compiling statement: FAILED: SemanticException [Error 10041]: No partition predicate found for Alias "inv" Table "pos_inv"
Run Code Online (Sandbox Code Playgroud)
(schema)分区,yyyymm是int类型,actvydt是日期存储为字符串类型.
我有从 JSON 文件创建的 Hive 表。
CREATE external TABLE logan_test.t1 (
name string,
start_time timestamp
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
WITH SERDEPROPERTIES (
"timestamp.formats" = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
)
LOCATION 's3://t1/';
Run Code Online (Sandbox Code Playgroud)
我的时间戳数据的格式为yyyy-MM-dd'T'HH:mm:ss.SSSSSS.
我为页面中给出的时间戳格式指定了 SERDEPROPERTIES。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types#LanguageManualTypes-TimestampstimestampTimestamps
创建语句成功执行但select *失败并出现以下错误。
HIVE_BAD_DATA:解析字段 1 的字段值 '2017-06-01T17:51:15.180400' 时出错:时间戳格式必须为 yyyy-mm-dd hh:mm:ss[.ffffffffff]
我有一个简单的hadoop工作,它抓取网站并将它们缓存到HDFS.映射器检查HDFS中是否已存在URL,如果存在,则使用它,否则下载页面并将其保存到HDFS.
如果在下载页面时遇到网络错误(404等),则会完全跳过URL - 不会写入HDFS.每当我运行一个小的列表~1000个网站时,我似乎总是遇到这个错误,它在我的伪分布式安装中反复崩溃了.可能是什么问题呢?
我正在运行Hadoop 0.20.2-cdh3u3.
org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /user/raj/cache/9b4edc6adab6f81d5bbb84fdabb82ac0 could only be replicated to 0 nodes, instead of 1
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:1520)
at org.apache.hadoop.hdfs.server.namenode.NameNode.addBlock(NameNode.java:665)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:557)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1434)
at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1430)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1428)
Run Code Online (Sandbox Code Playgroud) 要在Sqoop中安装MySQL连接器,我需要将jar文件放在Sqoop目录中,但我找不到它(它不在/usr/lib/sqoop).我在多台机器上安装了Cloudera的Sqoop.
我在哪里可以找到其中一台机器上的Sqoop目录?
我安装在伪分布式模式在一台机器上的Cloudera CDH4分布及测试成功,它正在正常工作(例如,可以运行MapReduce程序,蜂房服务器上插入数据等),但是,如果我机会core-site.xml文件已经fs.default.name设置为了加工名称而不是localhost重新启动NameNode服务,HDFS进入安全模式.
在更改之前fs.default.name,我运行以下命令来检查HDFS的状态:
$ hadoop dfsadmin -report
...
Configured Capacity: 18503614464 (17.23 GB)
Present Capacity: 13794557952 (12.85 GB)
DFS Remaining: 13790785536 (12.84 GB)
DFS Used: 3772416 (3.60 MB)
DFS Used%: 0.03%
Under replicated blocks: 2
Blocks with corrupt replicas: 0
Missing blocks: 0
Run Code Online (Sandbox Code Playgroud)
然后我做了修改core-site.xml(机器名称为hadoop):
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop:8020</value>
</property>
Run Code Online (Sandbox Code Playgroud)
我重新启动了该服务并重新报告了该报告.
$ sudo service hadoop-hdfs-namenode restart
$ hadoop dfsadmin -report
...
Safe mode is ON
Configured Capacity: 0 (0 B) …Run Code Online (Sandbox Code Playgroud) 我正在使用Cloudera Hadoop.我能够运行简单的mapreduce程序,我提供了一个文件作为MapReduce程序的输入.
此文件包含mapper函数要处理的所有其他文件.
但是,我陷入了困境.
/folder1
- file1.txt
- file2.txt
- file3.txt
Run Code Online (Sandbox Code Playgroud)
如何指定MapReduce程序的输入路径"/folder1",以便它可以开始处理该目录中的每个文件?
有任何想法吗 ?
编辑:
1)Intiailly,我提供了inputFile.txt作为mapreduce程序的输入.它工作得很好.
>inputFile.txt
file1.txt
file2.txt
file3.txt
Run Code Online (Sandbox Code Playgroud)
2)但是现在,我想在命令行上提供一个输入目录作为arg [0],而不是给出一个输入文件.
hadoop jar ABC.jar /folder1 /output
Run Code Online (Sandbox Code Playgroud) 我最近在http://www.cloudera.com上下载了"QuickStart VM"
(确切地说,是虚拟机的版本)这个虚拟机使用centOS(我的电脑是macbook air)我无法完全启动这个虚拟机(和我不知道为什么)我附上了最先进的启动状态的屏幕截图

我正在计划基于环境的多节点Hadoop集群的阶段Docker.所以它应该基于轻量级易用的虚拟化系统.当前架构(关于文档)包含1个主节点和3个从节点.该主机使用HDFS文件系统和KVM虚拟化.整个云由管理Cloudera Manager.此群集上安装了多个Hadoop模块.还有一个NodeJS数据上传服务.这次我应该以架构为Docker基础.我已阅读了几篇教程并提出了一些意见,但也提出了一些问题.
A.您怎么看?https://github.com/Lewuathe/docker-hadoop-cluster是我项目的良好基础吗?我发现了一个官方图片,但它是单节点的.
B.如果我想在单个容器中进行此操作,系统要求将如何变化?这将是很好的,因为这种架构应该在不同的位置工作,因此可以在这些位置之间轻松传输更改.这些所谓的克隆之间的同步将是重要的.
C.你有其他想法,也许是最佳做法?
我目前正在使用Cloudera 5.6尝试基于另一个表在hive表中创建一个镶木地板格式表,但我遇到了一个错误.
create table sfdc_opportunities_sandbox_parquet like
sfdc_opportunities_sandbox STORED AS PARQUET
Run Code Online (Sandbox Code Playgroud)
错误信息
Parquet does not support date. See HIVE-6384
Run Code Online (Sandbox Code Playgroud)
我读到hive 1.2有一个解决这个问题的方法,但是Cloudera 5.6和5.7并没有配备hive 1.2.有没有人找到解决这个问题的方法?
我正在使用HTTP POST调用在Livy Server中执行语句localhost:8998/sessions/0/statements,具有以下正文
{
"code": "spark.sql(\"select * from test_table limit 10\")"
}
Run Code Online (Sandbox Code Playgroud)
我想以下列格式给出答案
(...)
"data": {
"application/json": "[
{"id": "123", "init_date": 1481649345, ...},
{"id": "133", "init_date": 1481649333, ...},
{"id": "155", "init_date": 1481642153, ...},
]"
}
(...)
Run Code Online (Sandbox Code Playgroud)
但我得到的是
(...)
"data": {
"text/plain": "res0: org.apache.spark.sql.DataFrame = [id: string, init_date: timestamp ... 64 more fields]"
}
(...)
Run Code Online (Sandbox Code Playgroud)
哪个是toString()数据帧的版本.
有没有办法使用Livy Server将数据帧作为JSON返回?
找到解决问题的JIRA问题:https://issues.cloudera.org/browse/LIVY-72
根据评论,可以说Livy不会也不会支持这样的功能?