好的,所以我在linux机器上设置了远程hadoop节点上的hive表。我试图插入一个大的json字符串时遇到问题,大可能是64MB或更多,因为除非我接近该限制,否则map reduce将无法正常工作。我已经成功地转移了8到9MB,但是如果我尝试做的不仅仅是查询失败,那么它就会变得越来越高。我还必须覆盖C#的默认json序列化器才能做到这一点,这不是我所知道的好习惯,但我真的不知道其他任何方法。
无论如何,这就是我将数据存储到Hive中的方式:
namespace HadoopWebService.Controllers
{
public class LogsController : Controller
{
// POST: HadoopRequest
[HttpPost]
public ContentResult Create(string json)
{
OdbcConnection hiveConnection = new OdbcConnection("DSN=Hadoop Server;UID=XXXX;PWD=XXXX");
hiveConnection.Open();
Stream req = Request.InputStream;
req.Seek(0, SeekOrigin.Begin);
string request = new StreamReader(req).ReadToEnd();
ContentResult response;
string query;
try
{
query = "INSERT INTO TABLE error_log (json_error_log) VALUES('" + request + "')";
OdbcCommand command = new OdbcCommand(query, hiveConnection);
command.ExecuteNonQuery();
command.CommandText = query;
response = new ContentResult { Content = "{status: 1}", ContentType = "application/json" };
hiveConnection.Close();
return response;
}
catch(Exception error)
{
response = new ContentResult { Content = "{status: 0, message:" + error.ToString()+ "}" };
System.Diagnostics.Debug.WriteLine(error.Message.ToString());
hiveConnection.Close();
return response;
}
}
}
}
是否有一些设置可用于插入大量数据?我假设必须有一些缓冲区无法加载所有内容。我已经检查了谷歌,但我没有找到任何东西,主要是因为这可能不是正确插入Hadoop的方式,但我现在真的没有选择,我不能使用HDInsight,所有我'得到的是ODBC连接。
编辑:这是我得到的错误:
System.Data.Odbc.OdbcException(0x80131937):ERROR [HY000] [HiveODBC] (35)来自Hive的错误:错误代码:'0'错误消息:'ExecuteStatement 完成操作状态:ERROR_STATE'。
消息:System.Data.Odbc.OdbcException(0x80131937):错误[HY000] [Microsoft] [HiveODBC](35)来自Hive的错误:错误代码:'0'错误 消息:'ExecuteStatement已完成操作状态: ERROR_STATE”。在 System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior behavior,String方法,Boolean needReader,Object [] methodArguments, SQL_API odbcApiMethod)at System.Data.Odbc.OdbcCommand.ExecuteReaderObject(的CommandBehavior behavior,String方法,Boolean needReader)at System.Data.Odbc.OdbcCommand.ExecuteNonQuery()