Functies maken voor gegevens in een Hadoop-cluster met behulp van Hive-query'sCreate features for data in a Hadoop cluster using Hive queries

In dit document wordt beschreven hoe u functies maakt voor gegevens die zijn opgeslagen in een Azure HDInsight Hadoop cluster met behulp van Hive-query's.This document shows how to create features for data stored in an Azure HDInsight Hadoop cluster using Hive queries. Deze Hive-query's maken gebruik van Inge sloten Hive User-Defined functions (UDFs), de scripts waarvoor wordt voorzien.These Hive queries use embedded Hive User-Defined Functions (UDFs), the scripts for which are provided.

De bewerkingen die nodig zijn om functies te maken, kunnen geheugen intensief zijn.The operations needed to create features can be memory intensive. De prestaties van Hive-query's worden kritieker in dergelijke gevallen en kunnen worden verbeterd door bepaalde para meters af te stemmen.The performance of Hive queries becomes more critical in such cases and can be improved by tuning certain parameters. De afstemming van deze para meters wordt beschreven in de laatste sectie.The tuning of these parameters is discussed in the final section.

Voor beelden van de query's die worden gepresenteerd, zijn specifiek voor de NYC-gegevens scenario's in de github-opslag plaats.Examples of the queries that are presented are specific to the NYC Taxi Trip Data scenarios are also provided in GitHub repository. Deze query's hebben al een gegevens schema opgegeven en zijn gereed om te worden verzonden om te worden uitgevoerd.These queries already have data schema specified and are ready to be submitted to run. In de laatste sectie zijn para meters die gebruikers kunnen afstemmen, zodat de prestaties van Hive-query's kunnen worden verbeterd.In the final section, parameters that users can tune so that the performance of Hive queries can be improved are also discussed.

Deze taak is een stap in het team data Science process (TDSP).This task is a step in the Team Data Science Process (TDSP).

VereistenPrerequisites

In dit artikel wordt ervan uitgegaan dat u het volgende hebt:This article assumes that you have:

Onderdelen genererenFeature generation

In deze sectie worden verschillende voor beelden van de manieren waarop functies kunnen worden gegenereerd met hive-query's beschreven.In this section, several examples of the ways in which features can be generating using Hive queries are described. Zodra u extra functies hebt gegenereerd, kunt u deze als kolommen toevoegen aan de bestaande tabel of een nieuwe tabel maken met de extra functies en de primaire sleutel, die vervolgens kunnen worden gekoppeld aan de oorspronkelijke tabel.Once you have generated additional features, you can either add them as columns to the existing table or create a new table with the additional features and primary key, which can then be joined with the original table. Dit zijn de voor beelden die worden weer gegeven:Here are the examples presented:

  1. Genereren op basis van frequentie onderdelenFrequency-based Feature Generation
  2. Risico's van Categorische-variabelen in binaire classificatieRisks of Categorical Variables in Binary Classification
  3. Het veld datetime extra herenExtract features from Datetime Field
  4. Functies uit het tekst veld extra herenExtract features from Text Field
  5. De afstand tussen GPS-coördinaten berekenenCalculate distance between GPS coordinates

Genereren op basis van frequentie onderdelenFrequency-based feature generation

Het is vaak handig om de frequenties van de niveaus van een variabele categorische te berekenen of de frequentie van bepaalde combi Naties van niveaus uit meerdere Categorische-variabelen.It is often useful to calculate the frequencies of the levels of a categorical variable, or the frequencies of certain combinations of levels from multiple categorical variables. Gebruikers kunnen het volgende script gebruiken om deze frequenties te berekenen:Users can use the following script to calculate these frequencies:

select
    a.<column_name1>, a.<column_name2>, a.sub_count/sum(a.sub_count) over () as frequency
from
(
    select
        <column_name1>,<column_name2>, count(*) as sub_count
    from <databasename>.<tablename> group by <column_name1>, <column_name2>
)a
order by frequency desc;

Risico's van Categorische-variabelen in binaire classificatieRisks of categorical variables in binary classification

In binaire classificatie moeten niet-numerieke Categorische variabelen worden geconverteerd naar numerieke functies wanneer de modellen die worden gebruikt alleen numerieke functies hebben.In binary classification, non-numeric categorical variables must be converted into numeric features when the models being used only take numeric features. Deze conversie wordt uitgevoerd door elk niet-numeriek niveau te vervangen door een numeriek risico.This conversion is done by replacing each non-numeric level with a numeric risk. In deze sectie vindt u enkele algemene Hive-query's waarmee de risico waarden (log conflicteert) van een categorische-variabele worden berekend.This section shows some generic Hive queries that calculate the risk values (log odds) of a categorical variable.

set smooth_param1=1;
set smooth_param2=20;
select
    <column_name1>,<column_name2>,
    ln((sum_target+${hiveconf:smooth_param1})/(record_count-sum_target+${hiveconf:smooth_param2}-${hiveconf:smooth_param1})) as risk
from
    (
    select
        <column_nam1>, <column_name2>, sum(binary_target) as sum_target, sum(1) as record_count
    from
        (
        select
            <column_name1>, <column_name2>, if(target_column>0,1,0) as binary_target
        from <databasename>.<tablename>
        )a
    group by <column_name1>, <column_name2>
    )b

In dit voor beeld smooth_param1 worden variabelen en smooth_param2 ingesteld op het vloeiend maken van de risico waarden die worden berekend op basis van de gegevens.In this example, variables smooth_param1 and smooth_param2 are set to smooth the risk values calculated from the data. Risico's hebben een bereik tussen-inf en inf.Risks have a range between -Inf and Inf. Een risico > 0 geeft aan dat de kans dat het doel gelijk is aan 1 groter is dan 0,5.A risk > 0 indicates that the probability that the target is equal to 1 is greater than 0.5.

Nadat de risico tabel is berekend, kunnen gebruikers risico waarden toewijzen aan een tabel door deze te koppelen aan de risico tabel.After the risk table is calculated, users can assign risk values to a table by joining it with the risk table. In de vorige sectie is de Hive-query toegevoegd.The Hive joining query was provided in previous section.

Functies extra heren uit datum/tijd-veldenExtract features from datetime fields

Hive wordt geleverd met een set UDFs voor het verwerken van datetime-velden.Hive comes with a set of UDFs for processing datetime fields. In Hive is de standaard notatie voor datum/tijd ' JJJJ-MM-DD 00:00:00 ' (' 1970-01-01 12:21:32 ' bijvoorbeeld).In Hive, the default datetime format is 'yyyy-MM-dd 00:00:00' ('1970-01-01 12:21:32' for example). In deze sectie vindt u voor beelden van het extra heren van de dag van een maand, de maand uit een datum veld, en andere voor beelden die een datetime-teken reeks omzetten in een andere indeling dan de standaard indeling naar een datetime-teken reeks in de standaard indeling.This section shows examples that extract the day of a month, the month from a datetime field, and other examples that convert a datetime string in a format other than the default format to a datetime string in default format.

select day(<datetime field>), month(<datetime field>)
from <databasename>.<tablename>;

Deze Hive-query gaat ervan uit dat de <datetime field> in de standaard notatie voor datum/tijd is.This Hive query assumes that the <datetime field> is in the default datetime format.

Als een datum veld niet de standaard indeling heeft, moet u eerst het datum/tijd-veld converteren naar een UNIX-tijds tempel en de UNIX-tijds tempel vervolgens converteren naar een datum/tijd-teken reeks in de standaard indeling.If a datetime field is not in the default format, you need to convert the datetime field into Unix time stamp first, and then convert the Unix time stamp to a datetime string that is in the default format. Wanneer de datum/tijd de standaard indeling heeft, kunnen gebruikers de Inge sloten datetime-Udf's Toep assen om functies te extra heren.When the datetime is in default format, users can apply the embedded datetime UDFs to extract features.

select from_unixtime(unix_timestamp(<datetime field>,'<pattern of the datetime field>'))
from <databasename>.<tablename>;

In deze query geldt dat als het een <datetime field> patroon heeft dat lijkt op <pattern of the datetime field> 03/26/2015 12:04:39 'MM/dd/yyyy HH:mm:ss' .In this query, if the <datetime field> has the pattern like 03/26/2015 12:04:39, the <pattern of the datetime field>' should be 'MM/dd/yyyy HH:mm:ss'. Gebruikers kunnen de app testenTo test it, users can run

select from_unixtime(unix_timestamp('05/15/2015 09:32:10','MM/dd/yyyy HH:mm:ss'))
from hivesampletable limit 1;

De hivesampletable in deze query is standaard vooraf geïnstalleerd op alle Azure HDInsight Hadoop clusters wanneer de clusters zijn ingericht.The hivesampletable in this query comes preinstalled on all Azure HDInsight Hadoop clusters by default when the clusters are provisioned.

Functies uit tekst velden extra herenExtract features from text fields

Als de Hive-tabel een tekst veld bevat met een teken reeks met woorden die worden gescheiden door spaties, haalt de volgende query de lengte van de teken reeks en het aantal woorden in de teken reeks op.When the Hive table has a text field that contains a string of words that are delimited by spaces, the following query extracts the length of the string, and the number of words in the string.

select length(<text field>) as str_len, size(split(<text field>,' ')) as word_num
from <databasename>.<tablename>;

De afstanden tussen sets van GPS-coördinaten berekenenCalculate distances between sets of GPS coordinates

De query die in deze sectie wordt gegeven, kan rechtstreeks worden toegepast op de NYC-gegevens van de taxi-reis.The query given in this section can be directly applied to the NYC Taxi Trip Data. Het doel van deze query is om te laten zien hoe een Inge sloten wiskundige functie in Hive moet worden toegepast om functies te genereren.The purpose of this query is to show how to apply an embedded mathematical function in Hive to generate features.

De velden die in deze query worden gebruikt, zijn de GPS-coördinaten van pickup-en dropoff-locaties, de naam van de ophaal _ lengte, afhalen _ breedte graad, dropoff- _ lengte graad en dropoff _ breedte graad.The fields that are used in this query are the GPS coordinates of pickup and dropoff locations, named pickup_longitude, pickup_latitude, dropoff_longitude, and dropoff_latitude. De query's die de directe afstand berekenen tussen de coördinaten voor ophalen en dropoff zijn:The queries that calculate the direct distance between the pickup and dropoff coordinates are:

set R=3959;
set pi=radians(180);
select pickup_longitude, pickup_latitude, dropoff_longitude, dropoff_latitude,
    ${hiveconf:R}*2*2*atan((1-sqrt(1-pow(sin((dropoff_latitude-pickup_latitude)
    *${hiveconf:pi}/180/2),2)-cos(pickup_latitude*${hiveconf:pi}/180)
    *cos(dropoff_latitude*${hiveconf:pi}/180)*pow(sin((dropoff_longitude-pickup_longitude)*${hiveconf:pi}/180/2),2)))
    /sqrt(pow(sin((dropoff_latitude-pickup_latitude)*${hiveconf:pi}/180/2),2)
    +cos(pickup_latitude*${hiveconf:pi}/180)*cos(dropoff_latitude*${hiveconf:pi}/180)*
    pow(sin((dropoff_longitude-pickup_longitude)*${hiveconf:pi}/180/2),2))) as direct_distance
from nyctaxi.trip
where pickup_longitude between -90 and 0
and pickup_latitude between 30 and 90
and dropoff_longitude between -90 and 0
and dropoff_latitude between 30 and 90
limit 10;

De wiskundige vergelijkingen waarmee de afstand tussen twee GPS-coördinaten worden berekend, vindt u op de site met Gebeweegde type scripts , ontworpen door Peter Lapisu.The mathematical equations that calculate the distance between two GPS coordinates can be found on the Movable Type Scripts site, authored by Peter Lapisu. In deze Java script is de functie toRad() gewoon lat_or_lon pi/180, waarmee graden wordt geconverteerd naar radialen.In this Javascript, the function toRad() is just lat_or_lon pi/180, which converts degrees to radians. Lat_or_lon is hier de breedte graad of lengte graad.Here, lat_or_lon is the latitude or longitude. Component bevat de functie niet atan2 , maar biedt de functie atan . de atan2 functie wordt geïmplementeerd door de atan functie in de bovenstaande Hive-query met behulp van de definitie in Wikipedia.Since Hive does not provide the function atan2, but provides the function atan, the atan2 function is implemented by atan function in the above Hive query using the definition provided in Wikipedia.

Werkruimte maken

Een volledige lijst met Inge sloten Hive-Udf's vindt u in de sectie ingebouwde functies op de wiki Apache Hive.A full list of Hive embedded UDFs can be found in the Built-in Functions section on the Apache Hive wiki).

Geavanceerde onderwerpen: Hive-para meters afstemmen om de query snelheid te verbeterenAdvanced topics: Tune Hive parameters to improve query speed

De standaard parameter instellingen van het Hive-cluster zijn mogelijk niet geschikt voor de Hive-query's en de gegevens die door de query's worden verwerkt.The default parameter settings of Hive cluster might not be suitable for the Hive queries and the data that the queries are processing. In deze sectie worden enkele para meters beschreven die gebruikers kunnen afstemmen om de prestaties van Hive-query's te verbeteren.This section discusses some parameters that users can tune to improve the performance of Hive queries. Gebruikers moeten de para meters voor het afstemmen van query's toevoegen vóór de query's voor het verwerken van gegevens.Users need to add the parameter tuning queries before the queries of processing data.

  1. Java-heapruimte: voor query's waarbij grote gegevens sets worden samengevoegd of waarmee lange records worden verwerkt, is een van de meest voorkomende fouten opgetreden.Java heap space: For queries involving joining large datasets, or processing long records, running out of heap space is one of the common errors. Deze fout kan worden vermeden door het instellen van de para meters MapReduce. map. java. kiest en MapReduce. Task. io. .This error can be avoided by setting parameters mapreduce.map.java.opts and mapreduce.task.io.sort.mb to desired values. Hier volgt een voorbeeld:Here is an example:

    set mapreduce.map.java.opts=-Xmx4096m;
    set mapreduce.task.io.sort.mb=-Xmx1024m;
    

    Met deze para meter wordt er 4 GB geheugen toegewezen aan de opslag ruimte voor Java-heaps, en wordt het sorteren efficiënter door meer geheugen toe te wijzen.This parameter allocates 4-GB memory to Java heap space and also makes sorting more efficient by allocating more memory for it. Het is een goed idee om met deze toewijzingen af te spelen als er sprake is van fout fouten met betrekking tot de heap-ruimte.It is a good idea to play with these allocations if there are any job failure errors related to heap space.

  2. Grootte van DFS-blok: met deze para meter wordt de kleinste eenheid van gegevens ingesteld die het bestands systeem opslaat.DFS block size: This parameter sets the smallest unit of data that the file system stores. Als de grootte van het DFS-blok bijvoorbeeld 128 MB is, worden gegevens met een grootte van minder dan en Maxi maal 128 MB opgeslagen in één blok.As an example, if the DFS block size is 128 MB, then any data of size less than and up to 128 MB is stored in a single block. Gegevens die groter zijn dan 128 MB, worden toegewezen aan extra blokken.Data that is larger than 128 MB is allotted extra blocks.

  3. Het kiezen van een kleine blok grootte leidt tot grote overhead in Hadoop omdat het naam knooppunt veel meer aanvragen moet verwerken om het relevante blok dat bij het bestand hoort te vinden.Choosing a small block size causes large overheads in Hadoop since the name node has to process many more requests to find the relevant block pertaining to the file. Een aanbevolen instelling voor het omgaan met gigabytes (of grotere) gegevens is:A recommended setting when dealing with gigabytes (or larger) data is:

    set dfs.block.size=128m;
    
  4. De samenvoegings bewerking in de Hive wordt geoptimaliseerd: Hoewel samen voegingen in het Framework van de kaart of het raam werk normaal gesp roken plaatsvinden in de reductie fase, kunnen enorm winsten worden gerealiseerd door het plannen van samen voegingen in de kaart fase (ook wel ' mapjoins ' genoemd).Optimizing join operation in Hive: While join operations in the map/reduce framework typically take place in the reduce phase, sometimes, enormous gains can be achieved by scheduling joins in the map phase (also called "mapjoins"). Stel deze optie in:Set this option:

    set hive.auto.convert.join=true;
    
  5. Opgeven van het aantal mappers naar Hive: Hoewel Hadoop de gebruiker in staat stelt het aantal verminderers in te stellen, wordt het aantal mappers doorgaans niet ingesteld door de gebruiker.Specifying the number of mappers to Hive: While Hadoop allows the user to set the number of reducers, the number of mappers is typically not be set by the user. Een slag waarmee u rekening moet houden met een zekere mate van controle op dit nummer is het kiezen van de Hadoop-variabelen mapred. min. split. size en mapred. max. split. size als de grootte van elke kaart taak wordt bepaald door:A trick that allows some degree of control on this number is to choose the Hadoop variables mapred.min.split.size and mapred.max.split.size as the size of each map task is determined by:

    num_maps = max(mapred.min.split.size, min(mapred.max.split.size, dfs.block.size))
    

    Normaal gesp roken de standaard waarde:Typically, the default value of:

    • mapred. min. split. grootte is 0, dat vanmapred.min.split.size is 0, that of

    • mapred. max. split. grootte is lang. Max en die vanmapred.max.split.size is Long.MAX and that of

    • DFS. Block. grootte is 64 MB.dfs.block.size is 64 MB.

      Zoals we kunnen zien, op basis van de gegevens grootte, met behulp van deze para meters, kunnen we het aantal gebruikte mappers afstemmen.As we can see, given the data size, tuning these parameters by "setting" them allows us to tune the number of mappers used.

  6. Hier volgen enkele andere Geavanceerde opties voor het optimaliseren van Hive-prestaties.Here are a few other more advanced options for optimizing Hive performance. Met deze opties kunt u het toegewezen geheugen instellen om taken te koppelen en te verminderen. Dit kan nuttig zijn bij het verfijnen van de prestaties.These options allow you to set the memory allocated to map and reduce tasks, and can be useful in tweaking performance. Houd er rekening mee dat MapReduce. Reduc. MB niet groter mag zijn dan de grootte van het fysieke geheugen van elk worker-knoop punt in het Hadoop-cluster.Keep in mind that the mapreduce.reduce.memory.mb cannot be greater than the physical memory size of each worker node in the Hadoop cluster.

    set mapreduce.map.memory.mb = 2048;
    set mapreduce.reduce.memory.mb=6144;
    set mapreduce.reduce.java.opts=-Xmx8192m;
    set mapred.reduce.tasks=128;
    set mapred.tasktracker.reduce.tasks.maximum=128;