2013-03-01

1 执行jar文件
java.util.zip.ZipException: error in opening zip file
文件看看存在不,不存在的话就看看原来和现在所在位置的jdk版本一致不
2 50030页面打不开,50070可以打开,hadoop上传下载文件都没有问题,就是不能执行作业,会报9001连接不上,被拒绝的错误。各个节点的jps显示进程数也是正常的,但主节点查看mapred对应的日志,发现有报错,一个文件找不到。原来是有个mapred.hosts.exclude文件的名字写错了,改好配置文件后,重启hadoop集群,一切正常了。
3 hive建外部表时,location不能有2级目录,直接指向到有日志文件存在的那一层
4 使用insert into select from 语句报错:
2013-03-01 05:35:31.378 GMT Thread[main,5,main] java.io.FileNotFoundException: derby.log (Permission denied)
2013-03-01 05:35:31.460 GMT Thread[main,5,main] Cleanup action starting
ERROR XBM0H: Directory /root/TempStatsStore cannot be created.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at org.apache.derby.impl.services.monitor.StorageFactoryService$9.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.derby.impl.services.monitor.StorageFactoryService.createServiceRoot(Unknown Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.createPersistentService(Unknown Source)
        at org.apache.derby.iapi.services.monitor.Monitor.createPersistentService(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.createDatabase(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source)
        at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source)
        at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
        at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at org.apache.hadoop.hive.ql.stats.jdbc.JDBCStatsPublisher.init(JDBCStatsPublisher.java:259)
        at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:445)
        at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:136)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:133)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1332)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1123)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:931)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:255)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:212)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:671)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:554)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Cleanup action completed
2013-03-01 05:35:31.466 GMT Thread[main,5,main] Cleanup action starting
java.sql.SQLException: Failed to create database 'TempStatsStore', see the next exception for details.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.createDatabase(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection40.<init>(Unknown Source)
        at org.apache.derby.jdbc.Driver40.getNewEmbedConnection(Unknown Source)
        at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
        at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:207)
        at org.apache.hadoop.hive.ql.stats.jdbc.JDBCStatsPublisher.init(JDBCStatsPublisher.java:259)
        at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:445)
        at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:136)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:133)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1332)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1123)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:931)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:255)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:212)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:403)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:671)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:554)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: java.sql.SQLException: Failed to create database 'TempStatsStore', see the next exception for details.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
        ... 30 more
Caused by: java.sql.SQLException: Directory /root/TempStatsStore cannot be created.
        at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
        at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown Source)
        ... 27 more
Caused by: ERROR XBM0H: Directory /root/TempStatsStore cannot be created.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
        at org.apache.derby.impl.services.monitor.StorageFactoryService$9.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.apache.derby.impl.services.monitor.StorageFactoryService.createServiceRoot(Unknown Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.bootService(Unknown Source)
        at org.apache.derby.impl.services.monitor.BaseMonitor.createPersistentService(Unknown Source)
        at org.apache.derby.iapi.services.monitor.Monitor.createPersistentService(Unknown Source)
        ... 27 more
======解决:
修改hive-site.xml文件中以下属性:

<property>
  <name>hive.stats.dbclass</name>
  <!--value>jdbc:derby</value-->
  <value>jdbc:mysql</value>
  <description>The default database that stores temporary hive statistics.</description>
</property>


<property>
  <name>hive.stats.autogather</name>
  <value>true</value>
  <description>A flag to gather statistics automatically during the INSERT OVERWRITE command.</description>
</property>


<property>
  <name>hive.stats.jdbcdriver</name>
 <!-- <value>org.apache.derby.jdbc.EmbeddedDriver</value>-->
  <value>com.jdbc.mysql.Driver</value>
  <description>The JDBC driver for the database that stores temporary hive statistics.</description>
</property>


<property>
  <name>hive.stats.dbconnectionstring</name>
  <!--<value>jdbc:derby:;databaseName=TempStatsStore;create=true</value>-->
  <value>jdbc:mysql://mymaster:3306/TempStatsStore</value>
</property>
然后退出hive控制台,再重新进入。
5 将产生的结果暂存在一个表中,之后便可以用sqoop导出到mysql中。 
insert into table pvresult select requrl,ip,count(*) from test group by requrl,ip;
在创建pvresult表时,如果不指定分隔符,默认会按照ctrl-a分隔,查出来的数据再保存进这个新表
6 sqoop执行导出时报错:当以某用户身份执行sqoop命令时,要在该用户有权限的目录作为当前目录,执行sqoop命令才能成功,因为会涉及到往当前目录下写文件。
java.util.NoSuchElementException 
因为没指定数据字段的分隔符。sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。 --input-fields-terminated-by '\t'  。主要看你hive表中的数据是怎么分割的,默认是\0001(ctrl-a)
% 读取Excel文件 data = readtable('C:\Users\lenovo\Desktop\zuixin_winsorized_data.xlsx', 'Sheet', 'Sheet1'); % 提取PM2.5数据 pm25 = data.PM2_5; % 提取时间列(假设时间列是 'year', 'month', 'day', 'hour') time = datetime(data.year, data.month, data.day, data.hour, 0, 0); % 创建timetable pm25_tt = timetable(time, pm25); % 将时间序列转换为每日数据(按天求平均值) pm25_daily = retime(pm25_tt, 'daily', 'mean'); % 提取前两周的数据(3月1日到3月14日) startDate = datetime('2013-03-01'); endDate = datetime('2013-03-14'); pm25_train = pm25_daily(startDate:endDate, :); % 提取3月17日的数据作为目标 targetDate = datetime('2013-03-17'); pm25_target = pm25_daily(targetDate, :); % 准备训练数据 % ...(前面的数据读取代码保持不变) % 准备训练数据(关键修改部分) XTrain = pm25_train.pm25'; % 转置为行向量(1×14) XTrain = {XTrain}; % 包裹成cell数组,表示1个样本的14个时间步 YTrain = pm25_target.pm25; % 获取目标值 YTrain = {YTrain}; % 包裹成cell数组 % ...(后续模型定义和训练代码保持不变) % 定义LSTM模型 numFeatures = 1; % 输入特征的数量(PM2.5) numHiddenUnits = 100; % LSTM隐藏单元的数量 numResponses = 1; % 输出响应的数量(PM2.5) layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits) fullyConnectedLayer(numResponses) regressionLayer]; % 定义训练选项 options = trainingOptions('adam', ... 'MaxEpochs', 200, ... 'GradientThreshold', 1, ... 'InitialLearnRate', 0.005, ... 'LearnRateSchedule', 'piecewise', ... 'LearnRateDropPeriod', 125, ... 'LearnRateDropFactor', 0.2, ... 'Verbose', 0, ... 'Plots', 'training-progress'); % 训练模型 net = trainNetwork(XTrain, YTrain, layers, options); % 准备测试数据(前两周的数据) XTest = pm25_train.pm25'; XTest = num2cell(XTest, 1); % 转换为 cell 数组 % 进行预测 YPred = predict(net, XTest); % 显示预测结果 disp('Predicted PM2.5 for March 17:'); disp(YPred{end}); % 预测的最后一天是3月17日 这段代码运行时出现报错,报错信息为无效的训练数据。序列响应必须与对应的预测变量具有相同的序列长度。 出错 untitled14 (第 60 行) net = trainNetwork(XTrain, YTrain, layers, options);
最新发布
03-27
<think>好的,我现在需要解决用户提供的Matlab代码中的错误。错误信息是“无效的训练数据。序列响应必须与对应的预测变量具有相同的序列长度。”,发生在训练网络的时候。用户的任务是用LSTM模型预测PM2.5值,训练数据是前两周的日均数据,预测3月17日的值。 首先,我要理解错误的原因。根据错误信息,输入序列和输出响应的序列长度不一致。LSTM在时间序列预测中,通常每个输入序列对应一个输出序列或单个值。但在这里,用户希望用14天的数据预测第17天(中间隔了两天),这可能存在结构问题。 用户代码中,XTrain是一个包含一个cell的cell数组,每个cell是1×14的向量。YTrain同样是一个cell数组,每个cell是单个数值。这看起来像是多对一的设置,即14个时间步输入,输出一个值。但问题可能出在数据格式或网络结构上。 接下来,我需要检查trainNetwork的参数是否正确。LSTM的输入应该是序列数据,每个样本是一个特征×时间步的矩阵,但用户将XTrain转置为行向量并包裹成cell,可能维度不对。正确的输入格式应为numFeatures×numTimeSteps的矩阵,每个样本作为一个cell元素。例如,如果numFeatures=1,每个样本是1×14的矩阵,那么XTrain应为{1×14}。但YTrain如果是回归任务,通常每个样本对应一个输出值,此时YTrain应该是数值数组而非cell数组。或者,如果是序列到序列的训练,输出需要与输入长度相同。然而用户的情况是多对一,即多个时间步输入,一个输出,可能需要设置sequenceInputLayer和regressionLayer的正确配置。 此外,LSTM层默认输出最后一个时间步的结果,如果后面接全连接层和回归层,应该可以输出单个值。但需要确保响应数据YTrain的格式正确。可能用户将YTrain包装成了cell数组,而应该使用数值数组。例如,YTrain应该是数值向量而不是包裹在cell中的数值。或者,如果使用sequence-to-sequence,响应也需要是序列,但用户的情况是预测单个点,所以可能需要调整网络结构,比如设置'OutputMode'为'last'来确保LSTM输出最后一个时间步的结果。 可能的解决方案包括: 1. 检查输入和输出的维度是否正确。XTrain应为每个样本的特征×时间步,YTrain应为每个样本的响应值,可能不需要用cell包装。 2. 确保网络结构正确,特别是LSTM层的输出模式。例如,设置lstmLayer(numHiddenUnits, 'OutputMode', 'last'),这样每个输入序列只输出最后一个时间步的结果,对应单个预测值。 3. 调整YTrain的结构,使其为数值数组而非cell数组。或者,如果必须使用cell数组,每个响应cell中的元素应与输入序列长度一致(但这里用户希望输出单个值,所以可能需要不同的处理)。 另一个可能性是用户的数据划分有误。例如,训练数据可能没有正确对齐输入和输出的样本数量。例如,XTrain和YTrain中的样本数量必须一致。当前XTrain是1个样本,YTrain也是1个样本,这应该是正确的,但需要确保每个样本的响应长度正确。 综上,问题可能出在LSTM层的输出模式未设置为'last',导致输出序列长度与响应长度不一致。默认情况下,LSTM层的OutputMode是'sequence',即输出每个时间步的结果,此时如果响应是单个值,会导致长度不匹配。因此,应将LSTM层的OutputMode设置为'last',使其仅输出最后一个时间步,这样全连接层就可以正确映射到单个输出值。 另外,YTrain的结构可能需要调整。在回归问题中,YTrain通常是一个数值数组,每个元素对应一个样本的响应。如果使用cell数组,每个cell应包含正确维度的响应。例如,如果是多对一,每个cell应包含一个标量,但需要确认trainNetwork是否接受这种结构。根据Matlab文档,当输入是序列数据时,响应可以是相同长度的序列或单个值,但需要网络结构支持。例如,当使用sequenceInputLayer和regressionLayer,如果输出是单个值,响应应该是一个数值向量,而不是cell数组。因此,用户应将YTrain转换为数值数组,而不是包裹在cell中。 综上,修改步骤可能包括: 1. 修改LSTM层的OutputMode为'last'。 2. 将YTrain从cell数组改为数值数组。</think>根据错误信息和代码分析,问题出在输入数据(XTrain)和响应数据(YTrain)的维度不匹配。具体来说,LSTM网络默认期望每个输入序列对应一个相同长度的响应序列,而你的代码试图用14天的输入预测单日值,但数据格式处理有误。以下是修正方案: 修正后的代码关键部分: ```matlab % 修改后的数据准备部分 XTrain = pm25_train.pm25; % 保持列向量格式(14×1) XTrain = {XTrain}; % 包裹成cell数组,每个元素是14×1的序列 YTrain = pm25_target.pm25; % 直接使用数值(不需要cell包装) % 修改后的LSTM层定义 layers = [ sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits, 'OutputMode', 'last') % 关键修改:只输出最后时间步 fullyConnectedLayer(numResponses) regressionLayer]; ``` **问题解释:** 1. 维度不匹配:原始代码将输入序列转换为行向量(1×14),而LSTM期望的默认输入格式是[特征数×时间步](即1×14的列向量更合适) 2. 输出模式错误:未指定LSTM的OutputMode参数,默认输出完整序列,导致输出长度(14)与响应长度(1)不匹配 3. 响应格式错误:YTrain不应包裹在cell数组中,应直接使用数值数组 **建议的完整修改流程:** 1. 保持输入数据为列向量格式 2. 显式设置LSTM输出最后一个时间步 3. 调整响应数据格式 **最终修正代码:** ```matlab % 准备训练数据(正确格式) XTrain = pm25_train.pm25; % 保持列向量格式(14×1) XTrain = {XTrain}; % 包裹成cell数组,每个元素是14×1的序列 YTrain = pm25_target.pm25; % 直接使用数值(1×1 double) % 定义修正后的LSTM模型 layers = [ sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits, 'OutputMode', 'last') % 关键修改 fullyConnectedLayer(numResponses) regressionLayer]; % 保持其他代码不变... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值