我有一个非常基本的问题:如何向 Hive 添加一个非常简单的表。我的表保存在保存在 HDFS 中的文本文件 (.txt) 中。我试图在 Hive 中创建一个外部表,它指出了这个文件,但是当我运行 SQL 查询(select * from table_name)时,我没有得到任何输出。这是一个示例代码:
create external table Data (
dummy INT,
account_number INT,
balance INT,
firstname STRING,
lastname STRING,
age INT,
gender CHAR(1),
address STRING,
employer STRING,
email STRING,
city STRING,
state CHAR(2)
)
LOCATION 'hdfs:///KibTEst/Data.txt';
Run Code Online (Sandbox Code Playgroud)
KibTEst/Data.txt 是 HDFS 中文本文件的路径。
表中的行用回车分隔,列用逗号分隔。
谢谢你的帮助!
我创建了一个服务来启动和停止与我的 Spark 集群关联的 hdfs。
服务 :
[Unit]
Description=Hdfs service
[Service]
Type=simple
WorkingDirectory=/home/hduser
ExecStart=/opt/hadoop-2.6.4/sbin/start-service-hdfs.sh
ExecStop=/opt/hadoop-2.6.4/sbin/stop-service-hdfs.sh
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
问题是当我启动服务时,它在启动后立即启动和停止!:) 我认为问题是服务的类型,我真的不知道选择什么类型......
谢谢你。
此致
我有一个图像文件
image = JavaSparkContext.binaryFiles("/path/to/image.jpg");
Run Code Online (Sandbox Code Playgroud)
我想使用 Spark 处理然后将二进制信息保存到 HDFS
类似:
image.saveAsBinaryFile("hdfs://cluster:port/path/to/image.jpg")
Run Code Online (Sandbox Code Playgroud)
这可能吗,不是说“那么简单”,只是可能做到这一点?如果是这样你会怎么做。如果可能的话,尽量保持一对一,就像保留扩展名和类型一样,所以如果我直接使用 hdfs 命令行下载,它仍然是一个可行的图像文件。
我正在写信dataframe给HDFS,使用以下代码
final_df.write.format("com.databricks.spark.csv").option("header", "true").save("path_to_hdfs")
Run Code Online (Sandbox Code Playgroud)
它给了我以下错误:
Caused by: java.lang.NumberFormatException: For input string: "124085346080"
Run Code Online (Sandbox Code Playgroud)
完整堆栈如下:
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer.writeRows(WriterContainer.scala:261)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelationCommand$$anonfun$run$1$$anonfun$apply$mcV$sp$1.apply(InsertIntoHadoopFsRelationCommand.scala:143)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:86)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NumberFormatException: For input string: "124085346080"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:583)
at java.lang.Integer.parseInt(Integer.java:615)
at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:272)
at scala.collection.immutable.StringOps.toInt(StringOps.scala:29)
at org.apache.spark.sql.execution.datasources.csv.CSVTypeCast$.castTo(CSVInferSchema.scala:241)
at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:116)
at org.apache.spark.sql.execution.datasources.csv.CSVRelation$$anonfun$csvParser$3.apply(CSVRelation.scala:85)
at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$2.apply(CSVFileFormat.scala:128)
at org.apache.spark.sql.execution.datasources.csv.CSVFileFormat$$anonfun$buildReader$1$$anonfun$apply$2.apply(CSVFileFormat.scala:127)
at scala.collection.Iterator$$anon$12.nextCur(Iterator.scala:434)
at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:440)
at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:408)
at org.apache.spark.sql.execution.datasources.FileScanRDD$$anon$1.hasNext(FileScanRDD.scala:91)
at org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator.processNext(Unknown Source)
at org.apache.spark.sql.execution.BufferedRowIterator.hasNext(BufferedRowIterator.java:43)
at org.apache.spark.sql.execution.WholeStageCodegenExec$$anonfun$8$$anon$1.hasNext(WholeStageCodegenExec.scala:370)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply$mcV$sp(WriterContainer.scala:253)
at org.apache.spark.sql.execution.datasources.DefaultWriterContainer$$anonfun$writeRows$1.apply(WriterContainer.scala:252) …Run Code Online (Sandbox Code Playgroud) 我是 pyspark 的新手。从 pyspark 想知道是否有一些函数可以获取 HDFS 折叠修改日期?
在pyspark中:
def get_user_folder_update_date():
magic()
return update_time
print get_user_folder_update_date()
2017-12-20
Run Code Online (Sandbox Code Playgroud) 尽管多年来一直使用传统数据库,但我相信我对 Hive 和 Impala 如何与 HDFS 交互(或者 HDFS 本身如何工作!)有一个根本的误解,并希望得到一些建议。
只是为了设定我的想法:在 Windows 上,当我创建一个文件(例如 bob.txt)时,该文件存储在“文件系统”(NTFS)上。现在,无论我使用 Windows 资源管理器、命令提示符还是其他软件,我都会看到 bob.txt,因为它存在于“文件系统”中,并且所有软件都可以访问文件系统。
在我使用 RedHat 上的 Cloudera 与 HDFS 的 noobie 交互中,我不相信它的工作方式与上一段所述完全相同。
例如,在使用 Hue 时,如果我在“Hive 查询编辑器”中创建一个表,则在“Impala 查询编辑器”中时,该表似乎没有显示在表列表下。当我从命令提示符使用“hive”和“impala-shell”时,也会发生类似的情况。但是,这对我来说没有意义,因为在这种情况下,表应该只是“在文件系统上”——HDFS。
使用 sqoop 从 Oracle 中提取时会发生类似的操作。当我从 Oracle 中提取的表应该放在“文件系统上”时,为什么我需要使用“--import-hive”选项。一旦在 HDFS 文件系统上,位于它之上的任何软件——例如 Hive、Impala 或其他任何东西——都应该能够访问它。
在任何情况下,其中一些可能是 noobie 用户错误/误解,所以预先道歉!
并提前感谢您的任何评论/建议!
在我将数据帧写入 hdfs 之前,我coalesce(1)让它只写入一个文件,因此在复制内容时可以轻松手动处理内容,从 hdfs 获取,...
我会像这样编写输出。
outputData.coalesce(1).write.parquet(outputPath)
Run Code Online (Sandbox Code Playgroud)
(输出数据是org.apache.spark.sql.DataFrame)
我想问一下它们是否对性能有任何影响而不是合并
outputData.write.parquet(outputPath)
Run Code Online (Sandbox Code Playgroud) 是否有使用 Hadoop api/spark scala 将文件从一个目录复制到 Hdfs 上的另一个目录的已知方法?
我曾尝试使用 copyFromLocalFile 但没有帮助
我使用的是使用 hadoop-2.6.5.jar 版本的 spark-sql-2.4.1v。我需要先将数据保存在 hdfs 上,然后再转移到 cassandra。因此,我试图将数据保存在 hdfs 上,如下所示:
String hdfsPath = "/user/order_items/";
cleanedDs.createTempViewOrTable("source_tab");
givenItemList.parallelStream().forEach( item -> {
String query = "select $item as itemCol , avg($item) as mean groupBy year";
Dataset<Row> resultDs = sparkSession.sql(query);
saveDsToHdfs(hdfsPath, resultDs );
});
public static void saveDsToHdfs(String parquet_file, Dataset<Row> df) {
df.write()
.format("parquet")
.mode("append")
.save(parquet_file);
logger.info(" Saved parquet file : " + parquet_file + "successfully");
}
Run Code Online (Sandbox Code Playgroud)
当我在集群上运行我的工作时,它无法抛出此错误:
java.io.IOException: Failed to rename FileStatus{path=hdfs:/user/order_items/_temporary/0/_temporary/attempt_20180626192453_0003_m_000007_59/part-00007.parquet; isDirectory=false; length=952309; replication=1; blocksize=67108864; modification_time=1530041098000; access_time=0; owner=; group=; permission=rw-rw-rw-; isSymlink=false} to hdfs:/user/order_items/part-00007.parquet …Run Code Online (Sandbox Code Playgroud)